Сконфигурируйте 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 чтобы:

Браузер будет кешировать ответы,будутвсегда проверить кеш ивернет кэшированный ответ, если сервер ответит 304.

Проблема в том, что наши действия 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, что позволит добавлять / удалять заголовки.

Ответы на вопрос(1)

Ваш ответ на вопрос