Отключить кеширование на стороне клиента
Я искал информацию о том, как отключить кеширование на стороне клиента на уровне проекта.
Я знаю, что перед действием можно добавить следующее:
[System.Web.Mvc.OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]
Я также прочитал кое-что о создании профилей для кеширования, но это также означало бы ссылаться на них в нескольких местах. Я хотел бы установить один параметр в web.config или, возможно, в IIS?
Проект, над которым я работаю, содержит много частичных представлений
Заранее благодарю вас за любые советы по этому вопросу.
Ответы
Ответ 1
Вы можете отключить кеширование браузера через Web.Config:
<configuration>
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Cache-Control" value="no-cache, no-store" />
<add name="Pragma" value="no-cache" />
<add name="Expires" value="-1" />
</customHeaders>
</httpProtocol>
</system.webServer>
</configuration>
Источник: http://blog.jamesjones.name/2009/11/how-to-disable-browser-caching-in.html
Изменить: добавлено no-store
в Cache-Control
для Chrome (http://code.google.com/p/chromium/issues/detail?id=28035)
Вы можете установить это на уровне проекта или на уровне подкаталога для управления кешированием браузера по желанию. Например, в основном на основе данных/динамическом сайте я могу установить эти заголовки на уровне проекта, но в каталоге /static (который содержит мои .js,.css, images) добавляет еще один web.config, который включает в себя соответствующую директиву </clear>
и, возможно, вместо этого установите заголовок far-future-expires.
Ответ 2
Вы можете сделать BaseController
и задать для него свой профиль кеша.
Затем сделайте все ваши контроллеры наследуемыми от этого BaseController
.
Update:
Вот что я:
// Here is my custom OutputCaheAttribute to prevent cache at all.
//Whatever you may put anything you want.
//Of course i don't use it here but i put it to show you how it going.
[NoCache]
public class BaseController : Controller
{
protected override ViewResult View(string viewName, string masterName, object model)
{
// I do some stuffs here to change MasterPage depending on current culture.
// Don't care about it i just wanna show you why BaseController is good idea.
}
}
Затем ВСЕ мои контроллеры наследуют от этого BaseController
вместо обычного Controller
.
Надеюсь, что это было полезно ;)
Ответ 3
Вы можете определить профили кэша в web.config
, однако использование профилей кэша не работает с атрибутом OutputCache
в mvc 3. Прочитайте этот вопрос: Кэширование ChildActions с использованием профили кэша не будут работать?
Ответ 4
Атрибут OutputCache
используется для кеширования выходных действий на стороне сервера. Чтобы отключить его, вы просто не применяете атрибут к action/controller. Если вы хотите отключить клиентскую сторону, то об этом заботится, добавив заголовок, информирующий браузер, чтобы не кэшировать результат.
Ответ 5
Попробуйте это
[OutputCache (NoStore = true, Duration = 0, VaryByParam = "None" )]