Output caching in HTTP-Handler und SetValidUntilExpires
Ich bin mit der Ausgabezwischenspeicherung in meine benutzerdefinierte HTTP-handler in der folgenden Weise:
public void ProcessRequest(HttpContext context)
{
TimeSpan freshness = new TimeSpan(0, 0, 0, 60);
context.Response.Cache.SetExpires(DateTime.Now.Add(freshness));
context.Response.Cache.SetMaxAge(freshness);
context.Response.Cache.SetCacheability(HttpCacheability.Public);
context.Response.Cache.SetValidUntilExpires(true);
...
}
Es funktioniert, aber das problem ist, dass das aktualisieren der Seite mit F5-Taste führt Sie auf die Seite regeneration (statt cache-Auslastung) trotz der letzten codeline:
context.Response.Cache.SetValidUntilExpires(true);
Irgendwelche Vorschläge?
UPD: Scheint die Ursache des Problems ist, dass die HTTP-handler Reaktion nicht Zwischenspeichern auf dem server. Der folgende code funktioniert gut für web-form, aber nicht für hf:
Response.Cache.SetCacheability(HttpCacheability.Server);
Gibt es einige Besonderheiten der caching das http-handler Reaktion auf den server?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Habe ich den Grund gefunden.
Query-string-parameter ist in meiner URL, so wie es aussieht "http://localhost/Image.ashx?id=49". Ich habe gedacht, dass, wenn VaryByParams ist nicht explizit festgelegt, server wird immer der Wert der id, param berücksichtigt, weil Kontext.Antwort.Cache.VaryByParams.IgnoreParams standardmäßig false ist. Aber in der Tat-server nicht verwenden-cache überhaupt in diesem Fall (dennoch Benutzer-browser funktioniert).
So, wenn Parameter im query-string, Antwort.Cache.VaryByParams sollte explizit festgelegt werden, wie
für das ignorieren von Parametern oder
variation durch einige parameter oder
variation von allen Parametern.
?id=1&id=2&id=3
dann ist das immer noch nicht funktioniert. Ich weiß nicht warum, aber wollte die andere wissen zu lassen, über Sie.öffentlichen cachefähigkeit hängt davon ab, Benutzer-browser oder proxy gibt an, dass die Antwort cacheable von Kunden und gemeinsame (proxy) caches.
hatte Sie versucht, mit
HttpCacheability.Server
http://msdn.microsoft.com/en-us/library/system.web.httpcacheability(v=VS.71).aspx