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