2012-05-14 8 views
7

ho uscita caching abilitato in una delle pagine come segue:invalidare uscita cache se c'è un'eccezione sulla pagina

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

Il problema è che a volte v'è un'eccezione e che viene visualizzato un messaggio appropriato. Ma questa pagina viene quindi memorizzata nella cache e anche gli altri utenti visualizzano il messaggio di eccezione. Ad esempio, supponiamo che il database vada in timeout e quindi venga generata un'eccezione Sql. Questa eccezione viene catturata e viene visualizzato un messaggio "Errore durante la connessione al database. Prova dopo un po 'di tempo". Ora questo messaggio è memorizzato nella cache e mostrato ad altri utenti senza nemmeno interrogare il database.

Quindi, ciò che voglio fare è invalidare la particolare cache di output se c'è un'eccezione, o forse non la cache quando c'è un'eccezione. Come si può fare?

Questo è per ASP.NET 3.5 Webform.

risposta

5

Si dovrebbe essere in grado di rimuovere la voce di cache

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

+1 ma dov'è il posto migliore da attivare per tutte le eccezioni? Nel gestore delle eccezioni dell'oggetto dell'applicazione, o da qualche parte nella pagina, o infine nel metodo del controller (se è MVC e se non è troppo presto?) O da qualche altra parte? – Rup

2

Assumendo che l'eccezioni arrivano Application_Error in Global.asax, si può provare a seguire:

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; 
} 

Questo farà in modo che il prossimo la risposta non verrà pubblicata dalla cache, ma in realtà verrà inviata alla tua pagina/controller.

Problemi correlati