2013-12-03 2 views
0

Я следующий код, чтобы зарегистрировать маршрут с моей пользовательской routehandler:MVC Пользовательские RouteHandler не стреляя для файлов

routes.Add(New Route(path & "/{assembly}/{*resource}", New RouteValueDictionary(), New RouteValueDictionary(New With { _ 
      Key .assembly = AssemblyName _ 
      }), New EmbeddedContentRouteHandler(PluginAssembly, AssemblyName & "." & path))) 

Это позволяет мне получить доступ к внедренных ресурсов в скомпилированный DLL, например:/Content/PluginAssemblyName/File.name

В MVC 3 и 4 функция ProcessRequest срабатывает каждый раз, но из MVC 5 она не работает, она срабатывает только при указании каталога, что, очевидно, даст мне исключение для ссылки на null, потому что я ищу для файлов, а не каталогов (деноминированных, очевидно, в виде файла)

Я пробовал исключить .css и .js, чтобы попытаться посмотреть, не срабатывает ли мой ручной маршрут, ничего. Тестирование этого в проекте MVC 4 отлично работает.

Начиная отрывать волосы.

Любые идеи, почему RouteHandler не срабатывает в MVC 5, но делает это в MVC 4 и 3?

(Это вставные проект MVC с помощью MEF, что я привел к MVC 5 по частям, так как путь обновления не удавался слишком хорошо)

+0

Его, вероятно, та же причина и решение вопроса, что я ответил здесь http://stackoverflow.com/questions/19972092/asp-net-mvc-route-with-values-before-the-controller- and-no-trailing-slash/19978599 # 19978599 – LostInComputer

+0

Спасибо, имеет большой смысл, я думаю, я никогда не был на .NET 4.0 в моем проекте MVC, даже если он его нацеливал? Пожалуйста, добавьте свой ответ, ссылаясь на отвеченный вопрос, в своем комментарии здесь, чтобы я мог его пометить. – user3036342

+0

Конфигурация IIS или web.config, вероятно, все еще была на MVC3. Я добавлю свой ответ, если он решит вашу проблему :) – LostInComputer

ответ

1

Начиная ASP.net 4, она не будет перехватывать URL-адреса, которые заканчиваются расширением. Следуйте за решением here, чтобы вернуться к старому поведению.

и не забудьте добавить эту строку в свою конфигурацию маршрута, если вы хотите перехватить существующие файлы.

routes.RouteExistingFiles = true; 
Смежные вопросы