Почему этот вызов 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 совпадающим со всем.

Другие вопросы по тегам