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