2009-11-24 6 views
7

J'ai la page que je voudrais mettre en cache en utilisant la directive OutputCache. Cependant, j'utilise un module de réécriture d'URL pour diriger plusieurs URL sur cette page, chacune avec des contenus différents.Changement OutputCache basé sur l'URL

Est-il possible d'utiliser le cache pour chaque URL? Il n'y a aucun autre critère par lequel je dois faire varier les résultats de cache.

Répondre

10

En fin de compte cela était assez simple à corriger.

  1. Ajouter la directive suivante à la page qui doit être mis en cache:

    <% @ OutputCache durée = "600" location = "aval" VaryByParam = "none" VaryByCustom =% "RawURL">

  2. Ajouter cette méthode dans le fichier global.asax

    public override string GetVaryByCustomString(HttpContext context, string custom) 
    { 
        switch (custom.ToUpper()) 
        { 
         case "RAWURL": 
          return context.Request.RawUrl; 
    
         default: 
          return ""; 
        } 
    } 
    
+0

C'est intelligent ... mais il renvoie toujours un 200 au lieu d'un 304 (non modifié) comme il le ferait avec une URL non routée. Ainsi, bien qu'il ne soit pas * générer * à nouveau la page, le client doit encore * l'obtenir *, plutôt que d'utiliser son cache local. Toujours, bonne question. – harpo

0

Programatically vous pouvez définir les options de mise en cache en utilisant Response.Cache. Vous pouvez activer votre variable de chaîne de requête et, selon le cas, définir les propriétés sur Response.Cache de manière appropriée.

MSDN on Cache object
Another helpful article from aspalliance.com

+0

Je peux aussi varier le cac il est basé sur les en-têtes de requête, mais ceux-ci ne changent pas et il n'y a pas de variables de querystring utilisées – Blatfrig

Questions connexes