Konfigurieren Sie den MVC.NET OutputCache so, dass er 304 Not Modified zurückgibt, wenn sich ein ActionResult nicht geändert hat

Stellen Sie das Problem vor

Wir haben den Browser-Cache erfolgreich so konfiguriert, dass eine gespeicherte Antwort zurückgegeben wird, wenn der Server dies angibt304 Not Modified. Hier ist die Konfiguration:

<caching>
  <outputCacheSettings>
    <outputCacheProfiles>
      <add
        name="TransparentClient"
        location="Client"
        duration="0" />
    </output,CacheProfiles>
  </outputCacheSettings>
</caching>

Die web.config ist perfekt und setztCache-control:private, max-age=0&nbsp;damit:

Der Browser speichert die Antworten zwischen,werdenimmer&nbsp;Überprüfen Sie den Cache undgibt die zwischengespeicherte Antwort zurück, wenn der Server antwortet 304.

Das Problem ist, dass unsere MVC.NET-Aktionen immer auf 200 und niemals auf 304 reagieren.

Das Problem

Wie konfigurieren wir die Ausgabe-Zwischenspeicherung, um einen nicht geänderten Wert zurückzugeben, wenn sich ein ActionResult nicht geändert hat?

Gibt es eine integrierte Cache-Überprüfung in MVC.NET?Wenn nicht, wie rollen wir unseren eigenen Cache-Validierungsmechanismus?

Für den Eigenbau ist wahrscheinlich ein Aktionsfilter mit ETag oder Last-Modified erforderlich.

Screenshots

Hier ist ein Fiddler-Screenshot, der das Fehlen eines 304 zeigt.

318 ist eine UMSCHALT + Aktualisierung.332 ist eine Aktualisierung, die erwartungsgemäß zu einem 304. Problem führen würde.

Suche und Recherche

ASP.NET MVC: Wie kann ich den Status 304 "Nicht geändert" zurückgeben?&nbsp;erwähnt die Rückgabe eines 304 aus der Aktion. Dies bietet keine Möglichkeit, den OutputCache mit einem 304 genau reagieren zu lassen.

Arbeiten mit dem Ausgabecache und anderen Aktionsfiltern&nbsp;zeigt, wie OnResultExecuted überschrieben wird, um Header hinzuzufügen / zu entfernen.