Отключить кеширование на стороне клиента

Я искал информацию о том, как отключить кеширование на стороне клиента на уровне проекта. Я знаю, что перед действием можно добавить следующее:

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

Надеюсь, что это было полезно ;)

Ответ 4

Атрибут OutputCache используется для кеширования выходных действий на стороне сервера. Чтобы отключить его, вы просто не применяете атрибут к action/controller. Если вы хотите отключить клиентскую сторону, то об этом заботится, добавив заголовок, информирующий браузер, чтобы не кэшировать результат.

Ответ 5

Попробуйте это

[OutputCache (NoStore = true, Duration = 0, VaryByParam = "None" )]