Почему этот вызов IgnoreRoute соответствует этим запросам?
У меня есть httphandler локализации, который работает в контексте моей папки содержимого ASP.Net MVC2 (часть того, что он делает - это компилирует файлы.less, которые находятся в /Content/css). Мой маршрут по умолчанию для этого конкретного набора запросов выглядит следующим образом:
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" }
);
(В качестве отступления - я не думаю, что это актуально, но на всякий случай - VirtualDirectoryConstraint отклоняет совпадения на этом маршруте, если запрос не поступает из переданного пути приложения / виртуального каталога)
С этой конфигурацией вызов http://server.net/VDirectory1/Content/css/LessCompiler.axd
не удается, потому что нет класса ContentController. Все хорошо.
Когда я добавлю
context.Routes.IgnoreRoute("{Content}/{*pathInfo}");
этот вызов успешен, но последующие вызовы
http://server.net/VDirectory1/Localization/ClientScript/en-US.js
а также
http://server.net/VDirectory1/Authorization/ClientScript
потерпеть поражение. Если посмотреть на инструмент RouteDebugger Фила Хаака, эти вызовы соответствуют маршруту Content IgnoreRoute:
True {Content}/{*pathInfo} (null) (null) (null)
и поэтому не направляются на LocalizationController и AuthorizationController, соответственно.
Понятно, что я неправильно понимаю, как предполагается использовать IgnoreRoute и почему именно этот IgnoreRoute соответствует этим запросам. Что мне не хватает?
1 ответ
Не следует ли использовать IgnoreRoute Content
вместо {Content}
?
context.Routes.IgnoreRoute("Content/{*pathInfo}");
В данный момент, {Content}
вероятно, расширяется как переменная до нуля, что делает pathinfo совпадающим со всем.