2012-05-14 5 views
7

I Ausgabe-Caching in einer der Seiten aktiviert haben, wie folgt:Output Cache invalidieren, wenn es eine Ausnahme auf der Seite ist

<%@ OutputCache Duration="300" VaryByParam="*"%> 

Das Problem ist, dass es manchmal eine Ausnahme und wir zeigen eine entsprechende Meldung. Aber diese Seite wird dann zwischengespeichert und andere Benutzer sehen auch die Ausnahmebedingungsnachricht. Angenommen, die Datenbank hat ein Zeitlimit überschritten und daher wird eine Sql-Ausnahme ausgelöst. Diese Ausnahme wird abgefangen und es wird eine Meldung angezeigt "Fehler beim Herstellen der Verbindung zur Datenbank. Bitte versuchen Sie es nach einiger Zeit". Jetzt wird diese Nachricht zwischengespeichert und anderen Benutzern angezeigt, ohne die Datenbank abzufragen.

Also, was ich tun möchte, ist der bestimmte Ausgabe-Cache ungültig, wenn es eine Ausnahme gibt, oder vielleicht nicht Cache, wenn es eine Ausnahme gibt. Wie kann das gemacht werden?

Dies ist für ASP.NET 3.5 Webforms.

Antwort

5

Sie sollten in der Lage sein, das Cache-Element entfernen

HttpResponse.RemoveOutputCacheItem("/MyPage/MyParameter"); 
+1

+1 aber wo ist der beste Ort, um für alle Ausnahmen auszulösen? Im Exception-Handler des Anwendungsobjekts oder irgendwo auf der Seite oder schließlich auf der Controller-Methode (wenn es MVC ist, und wenn das nicht zu früh ist?) Oder woanders? – Rup

2

Angenommen, Ihre Ausnahmen Application_Error in Global.asax ankommen, können Sie Folgendes versuchen:

public void Application_Error(Object sender, EventArgs e) { 
    ... 

    Response.Cache.AddValidationCallback(
     DontCacheCurrentResponse, 
     null); 

    ... 
} 

private void DontCacheCurrentResponse(
    HttpContext context, 
    Object data, 
    ref HttpValidationStatus status) { 

    status = HttpValidationStatus.IgnoreThisRequest; 
} 

Dies wird sicherstellen, dass die nächste Die Antwort wird nicht aus dem Cache geliefert, sondern wird tatsächlich zu Ihrer Seite/Ihrem Controller gelangen.