2009-11-03 6 views
3

Si j'ai un HttpHandler AXD standard et la route par défaut ignorée pour * .axd, alors pourquoi ASP.NET MVC gère-t-il toujours les demandes dans les sous-répertoires, par exemple si une requête est faite pour **/Content/Css/** css.axd? D .... Si la requête est faite à la racine /css.axd?d .... tout fonctionne bien.HttpHandlers avec ASP.NET MVC

+0

Vous souhaiterez peut-être publier votre itinéraire, ce qui pourrait poser un problème avec la façon dont vous le définissez. –

+0

il s'agit de l'itinéraire ignoré par défaut: routes.IgnoreRoute ("{resource} .axd/{* pathInfo}"); – mare

Répondre

6

Je suppose que la route a été délibérément faite comme ça par la conception, peut-être parce que le joker au début d'une chaîne n'est pas aussi performant.

Malheureusement, cela ne fonctionnera pas:

routes.IgnoreRoute ("{*} pathAndResource .axd/{*} Pathinfo")

La solution est d'utiliser des contraintes - voir Phil Haack's blog post

blogs Phil utilise une contrainte d'expression régulière, mais vous pouvez créer votre propre coutume contraint de rendre les choses encore plus lisible:

routes.IgnoreRoute("match axds" 
"{*url}", new { controller = "MyController", action = "MyAction" }, new 
       { 
        myCustomConstraint = new FileExtensionConstraint(".axd") 
       } 
+0

Pourquoi est-ce par défaut IgnoreRoute là alors? Dans tous les nouveaux projets ASP.NET MVC créés ... – mare

+1

La route ignorer par défaut est nécessaire pour prendre en charge les ressources Web intégrées d'asp.net 2.0, qui se trouvent toujours sur: /webresource.axd voir: http: // support. microsoft.com/kb/910442. –