2010-06-08 8 views
7

I Ausgabe caching in meinen benutzerdefinierten HTTP-Handler in der folgenden Art und Weise bin mit:Output-Caching in HTTP-Handler und SetValidUntilExpires

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 die Seite mit F5 Auffrischen führt zu Seite Regeneration (statt Cache-Nutzung) trotz der letzten Codezeile:

context.Response.Cache.SetValidUntilExpires(true); 

Irgendwelche Vorschläge?

UPD: Scheint als die Ursache des Problems ist, dass HTTP-Handler-Antwort auf Server nicht zwischengespeichert wird. Der folgende Code funktioniert gut für Web-Formular, aber nicht für Handler:

 Response.Cache.SetCacheability(HttpCacheability.Server); 

Gibt es einige Besonderheiten des Caching der HTTP-Handler Antwort auf dem Server?

Antwort

18

ich den Grund versucht mit gefunden haben. Abfrage String-Parameter verwendet in meiner URL, so dass es aussieht wie "http://localhost/Image.ashx?id=49". Ich habe gedacht, dass, wenn VaryByParams nicht explizit festgelegt ist, der Server immer den Wert von ID-Parameter berücksichtigt, weil context.Response.Cache.VaryByParams.IgnoreParams standardmäßig falsch ist. Tatsächlich benutzt der Server in diesem Fall überhaupt keinen Cache (der Benutzerbrowser tut dies jedoch).

Also, wenn Parameter in Query-String verwenden, Response.Cache.VaryByParams sollte durch einige Parameter oder

explizit, wie

context.Response.Cache.VaryByParams.IgnoreParams = true; 

für das Ignorieren Parameter oder

context.Response.Cache.VaryByParams[<parameter name>] = true; 

für Variation eingestellt werden

context.Response.Cache.VaryByParams["*"] = true; 

für die Variation aller Parameter.

+0

Danke für das Finden dieser Lösung, arbeitete für mich mit einwertigen Abfrageparametern. Aber wenn ich einen mehrwertigen Parameter wie "? Id = 1 & id = 2 & id = 3" habe, funktioniert das immer noch nicht. Ich weiß noch nicht warum, wollte aber andere davon wissen lassen. – Oliver

0

Die öffentliche Cachefähigkeit hängt vom Benutzerbrowser oder Proxy ab und gibt an, dass die Antwort von Clients und freigegebenen (Proxy-) Caches zwischengespeichert werden kann.

hatte man HttpCacheability.Server

http://msdn.microsoft.com/en-us/library/system.web.httpcacheability(v=VS.71).aspx

+0

Ich habe es versucht, aber in diesem Fall funktioniert Caching überhaupt nicht. Ich benutze ASP.NET Entwicklungsserver. – mayor

Verwandte Themen