protected virtual void SetCache(HttpResponseBase response, int cacheDuration, params string[] varyByParams) { // Cache if (cacheDuration > 0) { DateTime timestamp = DateTime.Now; HttpCachePolicyBase cache = response.Cache; int duration = cacheDuration; cache.SetCacheability(HttpCacheability.Public); cache.SetAllowResponseInBrowserHistory(true); cache.SetExpires(timestamp.AddSeconds(duration)); cache.SetMaxAge(new TimeSpan(0, 0, duration)); cache.SetValidUntilExpires(true); cache.SetLastModified(timestamp); cache.VaryByHeaders["Accept-Encoding"] = true; if (varyByParams != null) { foreach (var p in varyByParams) { cache.VaryByParams[p] = true; } } cache.SetOmitVaryStar(true); response.AddHeader("Cache-Control", string.Format("public, max-age={0}", cacheDuration)); } }
public override void OnActionExecuted(ActionExecutedContext filterContext) { HttpCachePolicyBase cache = filterContext.HttpContext.Response.Cache; // 在關閉瀏覽器或者切換使用者時,刪除快取資料 (http://blog.toright.com/posts/3414/初探-http-1-1-cache-機制.html) cache.SetCacheability(HttpCacheability.Public); // 在 http response header 裡設 expire time 減少 client 送出 http request (http://fcamel-life.blogspot.tw/2010/06/http-response-header-expire-request.html) cache.SetExpires(DateTime.Now.AddDays(365)); // HTTP/1.0 // filterContext.HttpContext.Response.Cache.SetValidUntilExpires(true); cache.SetMaxAge(TimeSpan.FromDays(365)); // HTTP/1.1, Cache-Control: max-age cache.SetProxyMaxAge(TimeSpan.FromDays(365)); // HTTP/1.1, Cache-Control: s-maxage cache.SetETagFromFileDependencies(); cache.SetLastModifiedFromFileDependencies(); cache.SetAllowResponseInBrowserHistory(true); // http://stackoverflow.com/questions/6151292/httpcontext-current-response-cache-setcacheabilityhttpcacheability-nocache-not // 按下登出按鈕所需要的快取設定 //cache.SetCacheability(HttpCacheability.NoCache); //cache.SetExpires(DateTime.UtcNow.AddHours(-1)); //cache.SetNoStore(); // http://stackoverflow.com/questions/4078011/how-to-switch-off-caching-for-mvc-requests-but-not-for-static-files-in-iis7 // 關閉 Cache 功能 //cache.SetExpires(DateTime.UtcNow.AddDays(-1)); //cache.SetValidUntilExpires(false); //cache.SetRevalidation(HttpCacheRevalidation.AllCaches); //cache.SetCacheability(HttpCacheability.NoCache); //cache.SetNoStore(); }
public void Apply(HttpCachePolicyBase policy) { policy.ThrowIfNull("policy"); if (!_hasPolicy) { return; } switch (_cacheability) { case HttpCacheability.NoCache: policy.SetCacheability(_allowsServerCaching == true ? HttpCacheability.ServerAndNoCache : HttpCacheability.NoCache); break; case HttpCacheability.Private: policy.SetCacheability(_allowsServerCaching == true ? HttpCacheability.ServerAndPrivate : HttpCacheability.Private); break; case HttpCacheability.Public: policy.SetCacheability(HttpCacheability.Public); break; } if (_noStore == true) { policy.SetNoStore(); } if (_noTransforms == true) { policy.SetNoTransforms(); } if (_clientCacheExpirationUtcTimestamp != null) { policy.SetExpires(_clientCacheExpirationUtcTimestamp.Value); } if (_clientCacheMaxAge != null) { policy.SetMaxAge(_clientCacheMaxAge.Value); } if (_allowResponseInBrowserHistory != null) { policy.SetAllowResponseInBrowserHistory(_allowResponseInBrowserHistory.Value); } if (_eTag != null) { policy.SetETag(_eTag); } if (_omitVaryStar != null) { policy.SetOmitVaryStar(_omitVaryStar.Value); } if (_proxyMaxAge != null) { policy.SetProxyMaxAge(_proxyMaxAge.Value); } if (_revalidation != null) { policy.SetRevalidation(_revalidation.Value); } }
public override void OnActionExecuted(ActionExecutedContext filterContext) { HttpCachePolicyBase cache = filterContext.HttpContext.Response.Cache; cache.SetCacheability(_cacheability); cache.SetExpires(DateTime.Now); cache.SetAllowResponseInBrowserHistory(false); }
public override void OnResultExecuted(ResultExecutedContext filterContext) { HttpCachePolicyBase cache = filterContext.HttpContext.Response.Cache; cache.SetAllowResponseInBrowserHistory(false); cache.SetCacheability(HttpCacheability.NoCache); cache.SetNoStore(); base.OnResultExecuted(filterContext); }