Como: Verificar a validade de uma página armazenada
Quando uma página em cache é solicitada por um usuário, ASP.NET determina se a saída em cache é ainda válida com base na política de cache que você tenha definido na página.Se a saída é válida, a saída em cache é enviada para o cliente e a página não é reprocessada.Entretanto, o ASP.NET fornece a você a capacidade de executar código durante esta verificação de validação usando uma validação callback, de modo que você possa escrever lógica personalizada para verificar se a página é válida.A validação callback permite-lhe invalidar páginas armazenadas em cache fora do processo normal de uso de dependências de cache.
Para verificar a validade de uma página armazenada em cache programaticamente
Defina um manipulador de eventos do tipo HttpCacheValidateHandler e inclua código que verifica a validade da resposta da página armazenada em cache.
O manipulador de validação deve retornar um dos seguintes valores HttpValidationStatus:
Invalid Indica que a página armazenada em cache é inválida, a página é removida do cache, e a solicitação é tratada como perda de cache.
IgnoreThisRequest Faz com que a solicitação seja tratada sistema autônomo ignorado de cache. A página é processada novamente, mas a página armazenada em cache não é invalidada.
Valid Indica que a página armazenada na cache é válida.
O exemplo de código a seguir ilustra um manipulador de validação chamadoValidateCacheOutput que determina se a variável sequência de caracteres de consulta status contém os valores "invalidar" ou "ignorar";.Se o valor de status é "invalidar", o método retorna Invalid e a página é invalidada na cache.Se o valor de status é "ignorar", o método retorna IgnoreThisRequest e a página é deixada no cache, mas uma nova resposta é gerada para este pedido.
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
De um dos eventos de ciclo de vida de página (tais como o eventos da página Load), chama o método AddValidationCallback, passando como o primeiro argumento o manipulador de eventos que você definiu na etapa 1.
O exemplo de código a seguir define o método ValidateCacheOutput para ser o manipulador de validação.
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