Я ищу способ отключить кэш браузера для всего сайта ASP.NET MVC
Я нашел следующий метод:
Response.Cache.SetCacheability(System.Web.HttpCacheability.NoCache);
Response.Cache.SetNoStore();
А также метод метатега (он не будет работать для меня, так как некоторые действия MVC отправляют частичный HTML / JSON через Ajax, без заголовка, метатега).
<meta http-equiv="PRAGMA" content="NO-CACHE">
Но я ищу простой способ отключить кеш браузера для всего сайта.
Ответы:
Все запросы сначала направляются через default.aspx - при условии, что вы можете просто вставить туда код.
источник
Создайте класс, который наследуется от IActionFilter.
Затем поместите атрибуты, где это необходимо ...
источник
if (filterContext.IsChildAction) return;
сверху - это предотвратит внешнее действие, которое не будет кэшироваться, если оно вызывает дочернее действие, которое украшеноNoCache
атрибутом. Другими словами,NoCache
атрибут не попадет в другие действия, если они выполнят дочерние действия. Кроме того, имя класса должноNoCacheAttribute
соответствовать общепринятому соглашению об именах атрибутов.Вместо того, чтобы кататься самостоятельно, просто используйте то, что предоставлено для вас.
Как упоминалось ранее, не отключайте кэширование для всего. Например, сценарии jQuery, интенсивно используемые в ASP.NET MVC, должны быть кэшированы. На самом деле в идеале вы должны использовать CDN для тех или иных, но я хочу сказать, что некоторый контент должен быть кэширован.
Здесь я считаю, что лучше всего не использовать [OutputCache] везде, а использовать класс:
Все ваши контроллеры, для которых вы хотите отключить кэширование, затем наследуются от этого контроллера.
Если вам необходимо переопределить значения по умолчанию в классе NoCacheController, просто укажите параметры кэша в вашем методе действия, и параметры в вашем методе Action будут иметь приоритет.
источник
[System.Web.Mvc.OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]
на уровне класса, у вас не может быть PartialViews в вашем классе.Возможно, вы захотите отключить кэширование в браузере для всех страниц, отображаемых контроллерами (например, HTML-страниц), но оставьте кэширование на месте для таких ресурсов, как скрипты, таблицы стилей и изображения . Если вы используете связывание и минимизацию MVC4 +, вам следует сохранить длительность кэширования по умолчанию для скриптов и таблиц стилей (очень длительные, поскольку кэш становится недействительным на основании изменения уникального URL-адреса, а не на основе времени).
В MVC4 +, чтобы отключить кэширование браузера на всех контроллерах, но сохранить его для всего, что не обслуживается контроллером, добавьте это в
FilterConfig.RegisterGlobalFilters
:Определите
DisableCache
следующим образом:источник
Я знаю, что этот ответ не на 100% связан с вопросом, но он может кому-то помочь.
Если вы хотите отключить кэш браузера для всего веб-сайта ASP.NET MVC , но хотите сделать это ВРЕМЕННО, то лучше отключить кэш в вашем браузере.
источник
Я реализовал все предыдущие ответы и все еще имел одно представление, которое не работало правильно.
Оказалось, что имя представления, с которым у меня возникла проблема, было названо «Недавние». Видимо это смутило браузер Internet Explorer.
После того, как я изменил имя представления (в контроллере) на другое имя (я выбрал «Recent5»), вышеприведенные решения начали работать.
источник
Вы можете попробовать приведенный ниже код в файле Global.asax.
источник
UI
Задний план
источник