Compartir a través de


Cómo: Comprobar la validez de una página almacenada en la caché

Actualización: noviembre 2007

Cuando un usuario solicita una página almacenada en la memoria caché, ASP.NET determina si el resultado almacenado en la memoria caché aún es válido según la directiva de caché que se haya definido en la página. Si es válido, se envía el resultado almacenado en la memoria caché al cliente y no se vuelve a procesar la página. No obstante, ASP.NET proporciona la posibilidad de ejecutar código durante esta comprobación de validación mediante una devolución de llamada de validación, de modo que es posible escribir lógica personalizada para comprobar si la página es válida. La devolución de llamada de validación le permite invalidar páginas almacenadas en memoria caché fuera del proceso normal de utilización de dependencias de caché.

Para comprobar mediante programación la validez de una página almacenada en la caché

  1. Defina un controlador de eventos de tipo HttpCacheValidateHandler e incluya código que compruebe la validez de la respuesta de una página almacenada en la caché.

    El controlador de validación debe devolver uno de los siguientes valores de HttpValidationStatus:

    • Invalid   Indica que la página almacenada en la memoria caché no es válida, se elimina la página de la memoria caché y la solicitud se trata como un error de caché.

    • IgnoreThisRequest   Provoca que se trate la solicitud como un error de caché. Por consiguiente, la página se procesa de nuevo, pero no se invalida la página almacenada en la caché.

    • Valid   Indica que la página almacenada en la memoria caché es válida.

    En el ejemplo de código siguiente se muestra un controlador de validación denominado ValidateCacheOutput que determina si la variable de cadena de consulta status contiene los valores "invalid" (no válido) o "ignore" (omitir). Si el valor de estado es "invalid", el método devuelve Invalid y se invalida la página en la memoria caché. Si el valor de estado es "ignore", el método devuelve IgnoreThisRequest y se deja la página en la memoria caché, pero se genera una nueva respuesta para esta solicitud.

    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. A partir de uno de los eventos del ciclo de vida de la página (como el evento Load de la página), llame al AddValidationCallback pasando como primer argumento el controlador de eventos que definió en el paso 1.

    En el ejemplo de código siguiente se establece el método ValidateCacheOutput como controlador de validación.

    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
    

Vea también

Conceptos

Almacenar en caché páginas ASP.NET