public string BuildCacheControlHeader(CacheInfo cacheInfo)
{
var maxAge = cacheInfo.MaxAge;
if (maxAge == null && (cacheInfo.LastModified != null || cacheInfo.ETag != null))
maxAge = DefaultMaxAge;
var cacheHeader = new List<string>();
if (maxAge != null)
cacheHeader.Add("max-age=" + maxAge.Value.TotalSeconds);
if (cacheInfo.CacheControl != CacheControl.None)
{
var cache = cacheInfo.CacheControl;
if (cache.Has(CacheControl.Public))
cacheHeader.Add("public");
else if (cache.Has(CacheControl.Private))
cacheHeader.Add("private");
if (cache.Has(CacheControl.MustRevalidate))
cacheHeader.Add("must-revalidate");
if (cache.Has(CacheControl.NoCache))
cacheHeader.Add("no-cache");
if (cache.Has(CacheControl.NoStore))
cacheHeader.Add("no-store");
if (cache.Has(CacheControl.NoTransform))
cacheHeader.Add("no-transform");
if (cache.Has(CacheControl.ProxyRevalidate))
cacheHeader.Add("proxy-revalidate");
}
if (cacheHeader.Count <= 0)
return null;
var cacheControl = cacheHeader.ToArray().Join(", ");
return CacheControlFilter != null
? CacheControlFilter(cacheControl)
: cacheControl;
}
}