Perché questa chiamata IgnoReroute corrisponde a queste richieste?
-
12-12-2019 - |
Domanda
Ho una localizzazione httphandler che è in esecuzione nel contesto della mia cartella dei contenuti ASP.NET MVC2 (parte di ciò che sta facendo è compilare file senza compilazione che sono in / content / css). Il mio percorso predefinito per questo particolare set di richieste è simile a questo:
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" }
);
.
(come a parte - non penso che sia rilevante, ma nel caso in cui - il virtualDirectoryConaint respinge corrisponde a questo percorso se la richiesta non proviene dal percorso di applicazione Passed-in / directory virtuale)
Con questa configurazione una chiamata a http://server.net/VDirectory1/Content/css/LessCompiler.axd
non riesce perché non c'è la classe di contentController. Tutto bene e buono.
quando aggiungo
context.Routes.IgnoreRoute("{Content}/{*pathInfo}");
.
che la chiamata riesce, ma le chiamate successive a
http://server.net/VDirectory1/Localization/ClientScript/en-US.js
.
e
http://server.net/VDirectory1/Authorization/ClientScript
.
fallire. Guardando lo strumento di routedi di Phil Haack, quelle chiamate corrispondono al contenuto Ignoreroute Route:
True {Content}/{*pathInfo} (null) (null) (null)
.
e quindi non vengono instradati per la localizzazioneController e AutorizationController, rispettivamente.
Chiaramente sto fraintendendo qualcosa su come dovrebbe essere usato l'ignoreroute e perché quel particolare ignoreroute corrisponde a tali richieste. Cosa mi manca?
Soluzione
Non dovrebbe IgnoReroute utilizza Content
anziché {Content}
?
context.Routes.IgnoreRoute("Content/{*pathInfo}");
.
Al momento, {Content}
è probabilmente espanso come variabile per nulla, il che rende il pathinfo corrispondente a tutto.