Comment : contrôler la validité d'une page mise en cache

Mise à jour : novembre 2007

Lorsqu'une page mise en cache est demandée par un utilisateur, ASP.NET détermine si la sortie mise en cache est encore valide selon la stratégie de cache que vous avez définie dans la page. Si la sortie est valide, la sortie mise en cache est envoyée au client et la page n'est pas traitée une nouvelle fois. Toutefois, ASP.NET vous donne la possibilité d'exécuter du code pendant cette vérification de la validation à l'aide d'un rappel de validation, afin que vous puissiez écrire la logique personnalisée pour vérifier si la page est valide. Le rappel de validation vous permet d'invalider des pages mises en cache en dehors du processus normal d'utilisation de dépendances de cache.

Pour vérifier par programme la validité d'une page mise en cache

  1. Définissez un gestionnaire d'événements de type HttpCacheValidateHandler et incluez le code qui vérifie la validité de la réponse de la page mise en cache.

    Le gestionnaire de validation doit retourner l'une des valeurs HttpValidationStatus suivantes :

    • Invalid   Indique que la page mise en cache n'est pas valide ; la page est supprimée du cache et la demande gérée comme un accès au cache sans résultat.

    • IgnoreThisRequest   Indique que la demande doit être traitée comme un accès au cache sans résultat. La page est donc de nouveau traitée, mais la page mise en cache n'est pas invalidée.

    • Valid   Indique que la page mise en cache est valide.

    L'exemple de code suivant illustre un gestionnaire de validation nommé ValidateCacheOutput qui détermine si status de la variable de chaîne de requête contient les valeurs "non valide" ou "ignorer." Si l'état a la valeur "non valide", la méthode retourne Invalid et la page est invalidée dans le cache. Si l'état a la valeur "ignorer", la méthode retourne IgnoreThisRequest et la page est laissée dans le cache mais une nouvelle réponse est générée pour cette demande.

    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. À partir de l'un des événements de cycle de vie de la page (tel que l'événement Load de la page), appelez la méthode AddValidationCallback, en passant comme premier argument le gestionnaire d'événements que vous avez défini à l'étape 1.

    L'exemple de code suivant définit la méthode ValidateCacheOutput comme gestionnaire de validation.

    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
    

Voir aussi

Concepts

Mise en cache de pages ASP.NET