How do I turn off caching for my entire ASP.NET MVC 3 website?

后端 未结 4 1528
隐瞒了意图╮
隐瞒了意图╮ 2020-12-16 03:21

Like the question says, I wanted to know if it\'s possible to turn off caching on all controllers and actions for my entire site. Thanks!

相关标签:
4条回答
  • 2020-12-16 03:38

    You should add this method to your Global.asax.cs file

    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.
            }
    

    This disables cache on every request (images, html, js etc.).

    0 讨论(0)
  • 2020-12-16 03:43

    Create a Global Action Filter and override 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();
        }
    }
    

    And then register this in your global.asax, like so:

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

    In summation, what this does is create a Global Action Filter so that implicitly this will be applied to all Controllers and all Actions.

    0 讨论(0)
  • 2020-12-16 03:45

    Yes, depending on the approach you take. I like applying the actions to a base controller (hence my reply there). You could implement the filter at the link below and implement it as a global filter as well (registered in your global.asax.cs)

    Disable browser cache for entire ASP.NET website

    0 讨论(0)
  • 2020-12-16 03:51

    In web.config you can add additional headers to go out with every response

    <configuration>
        <system.webServer>
            <httpProtocol>
              <customHeaders>
                <add name="Cache-control" value="no-cache"/>
              </customHeaders>
            </httpProtocol>
        </system.webServer>
    </configuration>
    
    0 讨论(0)
提交回复
热议问题