2010-04-17 6 views
1

J'ai un paramètre de routage dans mon fichier global.asax:Exclure les paramètres de routage dans VaryByParam pour Asp.Net 4

routes.MapPageRoute("video-browse", "video/{id}/{title}/", "~/routeVideo.aspx"); 

Ma page routeVideo.aspx a mise en cache:

<%@ OutputCache Duration="10" Location="ServerAndClient" VaryByParam="id" %> 

Mais quand Je demande http://localhost/video/6/example1 et http://localhost/video/6/example2 après cela, la page est créée à nouveau. Donc je pense que VaryByParam fonctionne pour * mais je ne veux que compiler quand l'identifiant change. Y at-il un moyen de définir les paramètres de routage à VaryByParam?

Je veux cela parce que le paramètre de titre n'est pas important pour moi. Il est là seulement pour les moteurs de recherche et il n'est pas utilisé dans mon code.

Répondre

4

VaryByParam traite le paramètre en suivant le point d'interrogation '?', Mais le routage le masque dans le chemin. C'est pourquoi la mise en cache toujours "voir" différentes URL. Pour résoudre ce problème changer

"video/{title}?id={id} 
+0

@Dewfy Mais je veux l'URL comme localhost/vidéo/someID/any-titre. Aussi, je reçois les paramètres de routage de cette façon: Page.RouteData.Values ​​["id"] –

+2

@HasanGursoy alors à la place de VaryByParam, utilisez VaryByCustom. Le dernier vous donne la possibilité d'écrire sa propre méthode pour former la clé du système de cache. – Dewfy

0

Essayez ceci:

routes.MapPageRoute("video-browse", "video/{id}/{title}/", 
        "~/routeVideo.aspx?id={id}"); 
+0

@Raj Kaimal: Je reçois une erreur "L'URL de l'itinéraire ne peut pas commencer par un caractère '/' ou '~' et ne peut pas contenir un '?' Nom du paramètre: routeUrl "lorsque vous essayez d'utiliser" ~/routeVideo.aspx? id = {id} " –

+0

Que diriez-vous de spécifier le chemin que vous voulez? routes.MapPageRoute ("vidéo-parcourir", "vidéo/{id}/{titre} /", "MyFolder/MyVideos/routeVideo.aspx? id = {id}"); –

0

Vous devrez peut-être mettre validateIntegratedModeConfiguration false dans votre web.config.

Par exemple. voir ...

Outputcache doesn't work with routing

+0

@kervin: Ma configuration actuelle met en cache des pages avec routage. validateIntegratedModeConfiguration = "false" n'a pas aidé. Je veux juste mettre en cache mes pages en fonction du paramètre id. Je veux ignorer le paramètre de titre. Mais je ne peux pas obtenir VaryByParam = "id" fonctionnant. –