禁用整个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