Pourquoi cet appel IgnoreRoute correspond-il à ces requêtes ?
-
12-12-2019 - |
Question
J'ai un httphandler de localisation qui s'exécute dans le contexte de mon dossier de contenu ASP.Net MVC2 (une partie de ce qu'il fait consiste à compiler les fichiers .less qui se trouvent dans /Content/css).Mon itinéraire par défaut pour cet ensemble particulier de requêtes ressemble à ceci :
context.Routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
context.MapRoute(
"Area_default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional },
new { controller = new VirtualDirectoryConstraint("VDirectory1") },
new string[] { "Namespace.One.MVC" }
);
(En passant - je ne pense pas que ce soit pertinent, mais juste au cas où - VirtualDirectoryConstraint rejette les correspondances sur cette route si la demande ne provient pas du chemin d'application/répertoire virtuel transmis)
Avec cette configuration un appel à http://server.net/VDirectory1/Content/css/LessCompiler.axd
échoue car il n’y a pas de classe ContentController.Tout va bien.
Quand j'ajoute
context.Routes.IgnoreRoute("{Content}/{*pathInfo}");
cet appel réussit, mais les appels suivants à
http://server.net/VDirectory1/Localization/ClientScript/en-US.js
et
http://server.net/VDirectory1/Authorization/ClientScript
échouer.En regardant l'outil RouteDebugger de Phil Haack, ces appels correspondent à la route Content IgnoreRoute :
True {Content}/{*pathInfo} (null) (null) (null)
et ne sont donc pas acheminés vers LocalizationController et AuthorizationController, respectivement.
De toute évidence, je ne comprends pas bien la façon dont IgnoreRoute est censé être utilisé et pourquoi cet IgnoreRoute particulier correspond à ces demandes.Qu'est-ce que je rate?
La solution
Votre IgnoreRoute ne devrait-il pas utiliser Content
au lieu de {Content}
?
context.Routes.IgnoreRoute("Content/{*pathInfo}");
À l'heure actuelle, {Content}
est probablement étendu en tant que variable à rien, ce qui fait que les informations de chemin correspondent à tout.