Как отключить кэширование для всего моего сайта ASP.NET MVC 3? - PullRequest
9 голосов
/ 23 февраля 2012

Как говорится в вопросе, я хотел знать, возможно ли отключить кэширование на всех контроллерах и действиях для всего моего сайта.Спасибо!

Ответы [ 4 ]

15 голосов
/ 23 февраля 2012

Создать фильтр глобальных действий и переопределить 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());
    }

Подводя итог, мы создаем фильтр глобальных действий , чтобы неявно применять его ко всем контроллерам и всем действиям.

5 голосов
/ 27 мая 2013

Вы должны добавить этот метод в свой файл 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 и т. Д.).

1 голос
/ 21 декабря 2015

В web.config вы можете добавлять дополнительные заголовки для каждого ответа

<configuration>
    <system.webServer>
        <httpProtocol>
          <customHeaders>
            <add name="Cache-control" value="no-cache"/>
          </customHeaders>
        </httpProtocol>
    </system.webServer>
</configuration>
1 голос
/ 23 февраля 2012

Да, в зависимости от вашего подхода.Мне нравится применять действия к базовому контроллеру (отсюда мой ответ).Вы можете реализовать фильтр по ссылке ниже и использовать его как глобальный фильтр (зарегистрированный в вашем global.asax.cs)

Отключить кэш браузера для всего сайта ASP.NET

...