Das ResponseCache-Attribut speichert Daten auf der Clientseite nicht zwischen

8

In ASP.NET Core-Anwendung habe ich eine Aktionsmethode, die einige Daten zurückgibt. Ich wollte diese Daten auf der Clientseite zwischenspeichern . Basierend auf der Dokumentation hier kann ich das Attribut ResponseCache für die Aktionsmethode verwenden. Dieses Attribut fügt Cache-Control header in response

hinzu
  

Das Zwischenspeichern von Antworten bezieht sich auf die Angabe von cache-bezogenen Headern in HTTP   Antworten von ASP.NET Core MVC Aktionen gemacht. Diese Header geben an, wie   Sie möchten, dass Client- und Intermediate-Computer (Proxy-Computer) Antworten zwischenspeichern   auf bestimmte Anfragen (wenn überhaupt). Dies kann die Anzahl von reduzieren   fordert einen Client oder Proxy an, den Webserver zu betreiben, da dies zukünftig der Fall ist   Anfragen für dieselbe Aktion können von dem Client oder den Proxys geliefert werden   Cache.

auch

  

Beim Zwischenspeichern von Antworten werden Antworten auf dem Webserver nicht zwischengespeichert. Es   unterscheidet sich vom Ausgabe-Caching, bei dem Antworten im Speicher zwischengespeichert werden   der Server in früheren Versionen von ASP.NET und ASP.NET MVC.

So sieht meine Aktionsmethode

aus %Vor%

Dann rufe ich die Methode mit dem Browser als Ссылка auf Hier sind die Anforderungs- und Antwortheader

Beachten Sie, dass Response Headers wie erwartet Cache-Control: public,max-age-120 hat. Wenn jedoch die Seite mit F5 aktualisiert wird (vor 120 Sekunden), trifft der Debugger-Haltepunkt in der GetStateProvince-Aktionsmethode immer auf. Das bedeutet, dass die Daten nicht auf der Client-Seite gespeichert werden.

Gibt es noch etwas, das ich tun muss, um clientseitiges Caching zu aktivieren?

Aktualisieren Ich habe versucht, IE, Chrome und POSTMAN ohne Glück zu verwenden. Jedes Mal, wenn ich die URL in die Adresszeile eintippe oder auf den Refresh klicke, macht der Client (dh Browser oder Postbote) eine Call-to-Action-Methode.

    
LP13 01.11.2016, 21:42
quelle

2 Antworten

4

Das Attribut ResponseCache funktioniert wie beabsichtigt.
Der Unterschied besteht darin, dass die Antwort zwischengespeichert wird, wenn Sie auf den Seiten Ihrer Website navigieren ( Fall 1 ) oder die Schaltflächen Zurück und Weiter verwenden ( nicht beim Aktualisieren der Seite ).

Als Beispiel für Fall 1 habe ich Folgendes:

  • Sie befinden sich auf der Seite Ссылка
  • Geben Sie eine andere URL ein und klicken Sie auf "Enter" oder auf einen Link auf Ihrer Webseite: Ссылка
  • Geben Sie erneut die URL Ссылка ein (Sie werden sehen, dass diesmal die Antwort für diese URL vom Disk-Cache abgerufen wird)

Wie Sie im Artikel Response Caching in ASP.Net Core sehen können 1.1 wird folgendes angegeben:

  

Während einer Browsersitzung können Sie mehrere Seiten innerhalb der Website durchsuchen oder die Zurück- / Vorwärts-Taste verwenden, um die Seiten aufzurufen. Der Inhalt wird aus dem Cache des lokalen Browsers geliefert (wenn nicht abgelaufen).
Aber wenn Seite ist aktualisiert über F5 , wird die Anfrage an den Server weitergeleitet und der Seiteninhalt wird aktualisiert. Sie können es überprüfen, indem Sie die Kontaktseite mit F5 aktualisieren.
  Wenn Sie also F5 drücken, spielt der Ablaufwert für die Zwischenspeicherung von Antwort-Caching keine Rolle mehr, um den Inhalt zu liefern. Sie sollten 200 Antworten für die Kontaktanfrage sehen.

Referenzen:
 [1]. ASP.NET Core Response Caching-Beispiel (mit Middleware)
 [2]. ResponseCache-Attributbeispiel
 [3]: Wie das Zwischenspeichern von Webseiten in allen Browsern gesteuert wird ?

    
Michael 16.01.2017 12:20
quelle
0

Zunächst möchte ich einige Dinge klären und ich bin sicher, dass Sie es bereits wussten.

  1. ResponseCache ist auf keine Weise mit OutputCache identisch.

  2. ResponseCache entspricht meinem Kopfsatz, aber es speichert nichts auf der Serverseite.

Wenn Sie jetzt denselben Cache wie OutputCache verwenden möchten, müssen Sie möglicherweise die Version 1.1 verwenden, die gerade veröffentlicht wird.

ASP.net Core 1.1 Vorschauversion

Ссылка

Sie führen eine neue Response Caching Middleware ein. Antwort Caching Middleware

Demo davon hier verfügbar. Ссылка

    
dotnetstep 02.11.2016 10:21
quelle