Как и в случае с вопросом, я хотел знать, можно ли отключить кеширование на всех контроллерах и действиях для всего моего сайта. Благодаря!Как отключить кеширование для всего моего веб-сайта ASP.NET MVC 3?
ответ
Создание глобального фильтра действий и переопределить 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, так что это косвенно будет применяться ко всем контроллерам и всем действиям.
Да, в зависимости от подхода, который вы принимаете. Мне нравится применять действия к базовому контроллеру (отсюда и мой ответ). Вы могли бы реализовать фильтр по ссылке ниже, и реализовать его в качестве глобального фильтра, а также (зарегистрировано в вашем Global.asax.cs)
Вы должны добавить этот метод к вашему 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 и т.д.).
В web.config вы можете добавить дополнительные заголовки, чтобы выйти с каждым ответом
<configuration>
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Cache-control" value="no-cache"/>
</customHeaders>
</httpProtocol>
</system.webServer>
</configuration>
Спасибо за ответ. Как насчет скриптов, изображений и css? повлияет ли глобальный фильтр действий на них? Другими словами, фильтр действий выбирается только для запросов к контроллерам/действиям или по каждому запросу? Как и @AdamTuliper, я бы не захотел кэшировать эти – enamrik
@enamrik Hmmm ... после тестирования это выглядит как изображения и css, все еще кэшированные с помощью этого глобального фильтра действий. Мне нужно исследовать, как предотвратить это. –
Nevermind, по-видимому, это самое определение actionfilter, что они работают только по запросам на действия. – enamrik