如何关闭整个ASP.NET MVC 3网站的缓存?

时间:2012-02-23 01:48:11

标签: asp.net-mvc-3 caching output-caching

就像问题所说,我想知道是否可以关闭整个站点的所有控制器和操作的缓存。谢谢!

3 个答案:

答案 0 :(得分:15)

创建全局操作过滤器并覆盖OnResultExecuting()

public class DisableCache : 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();
    }
}

然后在你的global.asax中注册它,就像这样:

    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        filters.Add(new DisableCache());
    }

总而言之,这样做会创建一个Global Action Filter,以便隐式将其应用于所有控制器和所有操作。

答案 1 :(得分:5)

您应该将此方法添加到Global.asax.cs文件

protected void Application_BeginRequest(object sender, EventArgs e)
        {
            Response.AddHeader("Cache-Control", "no-cache, no-store, must-revalidate");
            Response.AddHeader("Pragma", "no-cache"); // HTTP 1.0.
            Response.AddHeader("Expires", "0"); // Proxies.
        }

这会在每个请求(图像,html,js等)上禁用缓存。

答案 2 :(得分:1)

是的,取决于您采取的方法。 我喜欢将动作应用到基本控制器(因此我的回复)。您可以在下面的链接中实现过滤器,并将其实现为全局过滤器(在global.asax.cs中注册)

Disable browser cache for entire ASP.NET website