Сконфигурируйте MVC.NET OutputCache так, чтобы он возвращал 304 Not Modified, если ActionResult не изменился
Введите проблему
Мы успешно настроили кеш браузера для возврата сохраненного ответа, если сервер указывает304 Not Modified
, Вот конфиг:
<caching>
<outputCacheSettings>
<outputCacheProfiles>
<add
name="TransparentClient"
location="Client"
duration="0" />
</outputCacheProfiles>
</outputCacheSettings>
</caching>
Web.config идеально подходит и устанавливаетCache-control:private, max-age=0
чтобы:
Проблема в том, что наши действия MVC.NET всегда отвечают 200, а не 304.
Эта проблема
Как настроить кэширование вывода для возврата 304 Not Modified, если ActionResult не изменился?
Есть ли встроенная проверка кэша в MVC.NET?Если это не так, как мы можем использовать собственный механизм проверки кэша?Для выполнения Roll-Our-own, вероятно, потребуется фильтр действий с ETag или Last-Modified.
Скриншоты
Вот скриншот Fiddler, показывающий отсутствие 304.
318 - это SHIFT + Обновить.332 - это обновление, которое, как мы ожидали, приведет к 304. Проблема.Поиск и исследование
ASP.NET MVC: как вернуть статус 304 «Не изменен»? упоминает возврат 304 изнутри Акции. Это не обеспечивает способа точного ответа OutputCache с 304.
Работа с выходным кешем и другими фильтрами действий показывает, как переопределить OnResultExecuted, что позволит добавлять / удалять заголовки.