Hat MVC OutputCaching Vorrang vor dem Setzen von Cache-Response-Headern?

8

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 :

%Vor%

Es gibt eine einzelne Controller-Aktion, für die ich das Caching aktivieren möchte. Ich habe diese Aktion mit dem Attribut OutputCache versehen:

%Vor%

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?

    
Carvellis 02.11.2010, 13:26
quelle

2 Antworten

2

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:

%Vor%

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.

    
Carvellis 03.11.2010, 12:28
quelle
7

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?

    
Marc Gravell 02.11.2010 13:34
quelle