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