禁用整个ASP.NET网站的浏览器缓存
我正在寻找一种方法来禁用整个ASP.NET MVC网站的浏览器缓存
我发现了以下方法:
Response.Cache.SetCacheability(System.Web.HttpCacheability.NoCache);
Response.Cache.SetNoStore();
还有一个元标记方法(它不适用于我,因为一些MVC操作通过Ajax发送部分HTML / JSON,而没有头元标记)。
<meta http-equiv="PRAGMA" content="NO-CACHE">
但我正在寻找一种简单的方法来禁用整个网站的浏览器缓存。
HttpContext.Current.Response.Cache.SetExpires(DateTime.UtcNow.AddDays(-1));
HttpContext.Current.Response.Cache.SetValidUntilExpires(false);
HttpContext.Current.Response.Cache.SetRevalidation(HttpCacheRevalidation.AllCaches);
HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.NoCache);
HttpContext.Current.Response.Cache.SetNoStore();
所有的请求都首先通过default.aspx进行路由 - 所以假设你可以在代码后面弹出代码。
创建一个从IActionFilter继承的类。
public class NoCacheAttribute : ActionFilterAttribute
{
public override void OnResultExecuting(ResultExecutingContext filterContext)
{
filterContext.HttpContext.Response.Cache.SetExpires(DateTime.UtcNow.AddDays(-1));
filterContext.HttpContext.Response.Cache.SetValidUntilExpires(false);
filterContext.HttpContext.Response.Cache.SetRevalidation(HttpCacheRevalidation.AllCaches);
filterContext.HttpContext.Response.Cache.SetCacheability(HttpCacheability.NoCache);
filterContext.HttpContext.Response.Cache.SetNoStore();
base.OnResultExecuting(filterContext);
}
}
然后把属性放在需要的位置
[NoCache]
[HandleError]
public class AccountController : Controller
{
[NoCache]
[Authorize]
public ActionResult ChangePassword()
{
return View();
}
}
不要自己动手,只需使用为您提供的内容即可。
如前所述,不要禁用所有内容的缓存。 例如,在ASP.NET MVC中大量使用的jQuery脚本应该被缓存。 实际上,理想情况下,您应该为这些人使用CDN,但我的观点是应该缓存一些内容。
我发现在这里最适合使用类,而不是将[OutputCache]散布在任何地方,
[System.Web.Mvc.OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]
public class NoCacheController : Controller
{
}
您想要禁用缓存的所有控制器都会从此控制器继承。
如果您需要覆盖NoCacheController类中的默认值,只需在您的操作方法中指定缓存设置,并且Action方法中的设置将优先。
[HttpGet]
[OutputCache(NoStore = true, Duration = 60, VaryByParam = "*")]
public ViewResult Index()
{
...
}
链接地址: http://www.djcxy.com/p/55693.html
上一篇: Disable browser cache for entire ASP.NET website
下一篇: Caching in asp.net