Gewusst wie: Prüfen der Gültigkeit einer zwischengespeicherten Seite

Aktualisiert: November 2007

Wenn ein Benutzer eine zwischengespeicherte Seite anfordert, bestimmt ASP.NET auf der Grundlage der für die Seite definierte Cacherichtlinien, ob die zwischengespeicherte Ausgabe noch gültig ist. Wenn die Ausgabe gültig ist, wird sie an den Client gesendet, und die Seite wird nicht erneut verarbeitet. Unter ASP.NET können Sie während dieser Validierung auch Code in Form eines Validierungsrückrufs ausführen. Damit können Sie eigenen Code zur Validierung der Seite schreiben. Durch den Validierungsrückruf können zwischengespeicherte Seiten außerhalb der normalen Cacheabhängigkeiten für ungültig erklärt werden.

So überprüfen Sie programmgesteuert die Gültigkeit einer zwischengespeicherten Seite

  1. Definieren Sie einen Ereignishandler vom Typ HttpCacheValidateHandler, und fügen Sie Code ein, der die zwischengespeicherte Seitenantwort validiert.

    Der Validierungshandler muss einen der folgenden HttpValidationStatus-Werte zurückgeben:

    • Invalid   Gibt an, dass die zwischengespeicherte Seite ungültig ist. Die Seite wird aus dem Cache entfernt, und die Anforderung wird als fehlgeschlagener Cachezugriff behandelt.

    • IgnoreThisRequest   Die Anforderung wird als fehlgeschlagener Cachezugriff behandelt. Die Seite wird daher erneut verarbeitet, aber die zwischengespeicherte Seite wird nicht für ungültig erklärt.

    • Valid   Gibt an, dass die zwischengespeicherte Seite gültig ist.

    Im folgenden Codebeispiel wird ein Validierungshandler mit dem Namen ValidateCacheOutput dargestellt, der bestimmt, ob die status-Variable in der Abfragezeichenfolge einen der Werte "invalid" oder "ignore" enthält. Wenn status den Wert "invalid" hat, gibt die Methode Invalid zurück, und die Seite wird im Cache für ungültig erklärt. Wenn status den Wert "ignore" hat, gibt die Methode IgnoreThisRequest zurück, und die Seite bleibt im Cache, es wird aber für diese Anforderung eine neue Antwort generiert.

    public static void ValidateCacheOutput(HttpContext context, Object data,
            ref HttpValidationStatus status)
    {
        if (context.Request.QueryString["Status"] != null)
        {
            string pageStatus = context.Request.QueryString["Status"];
    
            if (pageStatus == "invalid")
                status = HttpValidationStatus.Invalid;
            else if (pageStatus == "ignore")
                status = HttpValidationStatus.IgnoreThisRequest;
            else
                status = HttpValidationStatus.Valid;
        }
        else
            status = HttpValidationStatus.Valid;
    }
    
    Public Shared Sub ValidatePage(ByVal context As HttpContext, _
            ByVal data As [Object], ByRef status As HttpValidationStatus)
        If Not (context.Request.QueryString("Status") Is Nothing) Then
            Dim pageStatus As String = context.Request.QueryString("Status")
    
            If pageStatus = "invalid" Then
                status = HttpValidationStatus.Invalid
            ElseIf pageStatus = "ignore" Then
                status = HttpValidationStatus.IgnoreThisRequest
            Else
                status = HttpValidationStatus.Valid
            End If
       Else
           status = HttpValidationStatus.Valid
       End If
    End Sub
    
  2. Rufen Sie aus einem der Handler für ein Lebenszyklusereignis der Seite (z. B. das Load-Ereignis der Seite) die AddValidationCallback-Methode auf, und übergeben Sie als erstes Argument den in Schritt 1 definierten Ereignishandler.

    Im folgenden Codebeispiel wird die ValidateCacheOutput-Methode als Validierungshandler festgelegt.

    protected void Page_Load(object sender, EventArgs e)
    {
        Response.Cache.AddValidationCallback(
            new HttpCacheValidateHandler(ValidateCacheOutput),
            null);
    }
    
    Protected Sub Page_Load(ByVal sender As Object, _
        ByVal e As System.EventArgs) Handles Me.Load
    
        Response.Cache.AddValidationCallback( _
            New HttpCacheValidateHandler(AddressOf ValidatePage), Nothing)
    End Sub
    

Siehe auch

Konzepte

Zwischenspeichern von ASP.NET-Seiten