如何禁用 ASP.NET 网站的所有的 浏览器缓存 ?
Posted dotNET跨平台
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何禁用 ASP.NET 网站的所有的 浏览器缓存 ?相关的知识,希望对你有一定的参考价值。
咨询区
Palani:
我在寻找一个方法禁用某个 ASP.NET MVC 网站的所有浏览器缓存,我发现了如下方法。
Response.Cache.SetCacheability(System.Web.HttpCacheability.NoCache);
Response.Cache.SetNoStore();
而且我也发现了可以在 html 上追加一个 meta 标记。
<meta http-equiv="PRAGMA" content="NO-CACHE">
但这种方式不适合我,因为我的网站中会有一些 ajax 请求,自然就无法携带meta了。
请问我如何在全局作用域下实现这么一个禁用浏览器缓存的功能?
回答区
JKG:
可以自定义一个继承 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]
标记即可,比如下面的 Controller。
[NoCache]
[HandleError]
public class AccountController : Controller
{
[NoCache]
[Authorize]
public ActionResult ChangePassword()
{
return View();
}
}
NidhinSPradeep
你可以在 Global.asax 下的 Application_BeginRequest 方法中实现此功能。
protected void Application_BeginRequest()
{
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetExpires(DateTime.UtcNow.AddHours(-1));
Response.Cache.SetNoStore();
}
JKG:
你可以使用 Asp.NET 自带的 OutputCache 特性。
[System.Web.Mvc.OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]
直接使用 OutputCache 特性的话,会让这些代码零散在项目各处,更好的做好应该是封装到一个 Controller 中,然后让需要的 Controller 继承此 Controller 即可,比如下面的代码。
[System.Web.Mvc.OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]
public class NoCacheController : Controller
{
}
public class HomeController : NoCacheController
{
}
点评区
全局禁用浏览器的Cache,这需求有点奇葩哈,不过本篇也学习到了如何全局性的配置,有收获。
以上是关于如何禁用 ASP.NET 网站的所有的 浏览器缓存 ?的主要内容,如果未能解决你的问题,请参考以下文章
强制客户端浏览器重新下载我们的 asp.net Web 应用程序的 .css 和 .js 文件的优雅方式(不完全禁用缓存)