2012-05-14 10 views
7

mam buforowanie wyjścia włączony jednej ze stron, co następuje:unieważnić Output Cache jeśli istnieje wyjątek na stronie

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

Problem jest, że czasami istnieje wyjątek i wyświetla odpowiedni komunikat. Ale ta strona jest następnie buforowana, a inni użytkownicy widzą komunikat wyjątku. Załóżmy na przykład, że baza danych przekroczyła limit czasu, a zatem wyrzucono wyjątek Sql. Ten wyjątek został przechwycony i wyświetlany jest komunikat "Błąd połączenia z bazą danych. Spróbuj po pewnym czasie". Teraz ta wiadomość jest zapisywana w pamięci podręcznej i pokazywana innym użytkownikom, nawet bez sprawdzania bazy danych.

To, co chcę zrobić, to unieważnić konkretną wyjściową pamięć podręczną, jeśli istnieje wyjątek, lub może nie buforować, gdy istnieje wyjątek. Jak to zrobić?

Dotyczy wersji sieci Web ASP.NET 3.5.

Odpowiedz

5

Powinieneś być w stanie usunąć element cache

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

+1 ale gdzie jest najlepsze miejsce, które uruchamia wszystkie wyjątki? W module obsługi wyjątków obiektu aplikacji lub gdzieś na stronie lub w metodzie kontrolera (jeśli jest to MVC i czy nie jest za wcześnie?) Czy gdzie indziej? – Rup

2

Zakładając, że wyjątki przybyć do Application_Error w Global.asax, można spróbować następujących czynności:

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

To będzie upewnić się, że następna odpowiedź nie będzie obsługiwana z pamięci podręcznej, ale faktycznie przejdzie na twoją stronę/kontroler.

Powiązane problemy