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 damit:

Der Browser speichert die Antworten zwischen,werdenimmer Ü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? 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 zeigt, wie OnResultExecuted überschrieben wird, um Header hinzuzufügen / zu entfernen.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage