Condividi tramite


Procedura: verificare la validità di una pagina memorizzata nella cache

Aggiornamento: novembre 2007

Quando una pagina memorizzata nella cache viene richiesta da un utente, ASP.NET determina se l'output presente nella cache è ancora valido in base ai criteri di cache definiti per la pagina. Se l'output è valido, viene inviato al client e la pagina non viene rielaborata. ASP.NET fornisce tuttavia la possibilità di eseguire il codice durante il controllo di convalida utilizzando un callback di convalida, consentendo di scrivere una logica personalizzata per verificare la validità della pagina. Il callback di convalida consente di invalidare le pagine memorizzate nella cache che non rientrano nel normale processo di utilizzo delle dipendenze della cache.

Per verificare la validità di una pagina memorizzata nella cache a livello di codice

  1. Definire un gestore eventi di tipo HttpCacheValidateHandler e includere il codice che verifica la validità della risposta basata sulla pagina memorizzata nella cache.

    Il gestore della convalida deve restituire uno dei valori HttpValidationStatus riportati di seguito.

    • Invalid   Indica che la pagina memorizzata nella cache non è valida, la pagina viene rimossa dalla cache e la richiesta viene gestita come non soddisfatta dalla cache.

    • IgnoreThisRequest   La richiesta viene gestita come non soddisfatta dalla cache e la pagina viene quindi nuovamente elaborata, ma la pagina memorizzata nella cache non viene invalidata.

    • Valid   Indica che la pagina memorizzata nella cache è valida.

    NelI'esempio di codice riportato di seguito viene illustrato come il gestore di convalida ValidateCacheOutput determina se la variabile di tipo stringa della query status contiene i valori "invalid" o "ignore". Se il valore dello stato è "invalid", il metodo restituisce Invalid e la pagina viene invalidata nella cache. Se il valore dello stato è "ignore", il metodo restituisce IgnoreThisRequest e la pagina resta nella cache, ma viene generata una nuova risposta per la richiesta.

    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. Da uno degli eventi del ciclo di vita della pagina, ad esempio l'evento Load, chiamare il metodo AddValidationCallback, passando come primo argomento il gestore eventi definito nel passaggio 1.

    Nell'esempio di codice riportato di seguito viene impostato il metodo ValidateCacheOutput come il gestore di convalida.

    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
    

Vedere anche

Concetti

Memorizzazione nella cache di pagine ASP.NET