Diese Frage bezieht sich auf meine andere Frage .
Ich habe eine MVC-Anwendung mit Caching für alle Controller-Aktionen deaktiviert. Dazu setze ich Cache-Response-Header in Application_BeginRequest
:
Es gibt eine einzelne Controller-Aktion, für die ich das Caching aktivieren möchte. Ich habe diese Aktion mit dem Attribut OutputCache
versehen:
Was passiert jetzt für diese Aktion? Wird es aufgrund des OutputCache-Attributs zwischengespeichert oder wird es aufgrund der Antwortheader nicht zwischengespeichert?
- BEARBEITEN -
Wie es scheint, haben die Antwortheader Vorrang. Meine Frage lautet also: Wie kann ich den Cache für einzelne Controller-Aktionen aktivieren? Überschreiben Sie die Antwortheader erneut?
Die Antwortheader erzwingen das Cache-Steuerelement. Die Lösung bestand nicht darin, Antwort-Header für Controller-Aktionen zu setzen, die Caching benötigen. Anstatt OutputCache
zu verwenden, verwende ich jetzt ein benutzerdefiniertes Cache-Attribut, das auch einen ISCACHED
-Schlüssel im Wörterbuch der Anfrageelemente festlegt. Das Code-Snippet aus meiner Frage wurde folgendermaßen geändert:
Ich musste dies von BeginRequest
nach EndRequest
verschieben, damit Aktionen das ISCACHED
-Abfrageelement zuerst setzen konnten. Wenn dies festgelegt ist, hat ein Controller bereits das Caching für diese Anforderung durchgeführt, andernfalls ist das Caching deaktiviert.
Die zwei Dinge sind getrennt; der Antwort-Cache ist primär , wenn er sieht, was der Client sieht - was er benutzt, ohne den Server zu treffen, oder welches Änderungsdatum er an den Server sendet.
OutputCache ist jedoch auf den Server fokussiert; die Anfrage wird immer noch passieren (im Gegensatz zu etwas, das auf dem Client zwischengespeichert wird), aber es ist möglich (hoffentlich wahrscheinlich), dass Ihre Methode nicht aufgerufen wird: Stattdessen wird die zwischengespeicherte Version zurückgegeben.
Also: es ist nicht zwischengespeichert auf dem Client; es wird eine HTTP-Anfrage erstellt, und (für Anfragen innerhalb von 5 Minuten für die gleiche id
, die der Speicher zulässt) wird die cached -Version vom Server zurückgegeben (was normalerweise die IO- und CPU-Last auf dem Server reduziert) . Sinn machen?
Tags und Links asp.net-mvc .net c# caching outputcache