В моем веб-приложении у меня есть маршрут, который выглядит так:
routeCollection.MapRoute(
"AdfsMetadata", // name
"FederationMetadata/2007-06/FederationMetadata.xml", // url
new { controller = "AdfsController", action = "MetaData" }); // defaults
Идея этого маршрута заключалась в том, чтобы лучше работать с сервером Microsoft AD FS (2.0+), который ищет метаданные AD FS в этот момент, когда вы просто указываете имя хоста. С MVC3 все работало нормально. Но мы недавно обновили проект до MVC4, и теперь вызов этого URL-адреса приводит к 404, обработчик, упомянутый на странице ошибки, StaticFile
, а физический путь - D:\path\to\my\project\FederationMetadata\2007-06\FederationMetadata.xml
. Я предполагаю, что MVC или ASP.NET "думает", это должен быть запрос на статический файл и ищет файл, но это не файл. Данные генерируются динамически - поэтому я направил URL-адрес на действие контроллера. Проблема в том, что даже отладчик Route от Phil Haack не работает. Это всего лишь 404 без дополнительной информации, кроме того, что IIS попытался получить доступ к физическому файлу, которого там нет.
У кого-нибудь есть решение для этого? Я просто хочу, чтобы этот URL-адрес был перенаправлен на действие контроллера.
PS: Я не уверен на 100%, что причиной было обновление до MVC4, это было просто предположение, потому что ошибка произошла примерно в то же самое время, что и обновление, и тот же маршрут работает в другом проекте, который все еще используя MVC3.
Edit:
У меня есть пользовательский ControllerFactory
, которому требуется полное имя класса (AdfsController
вместо Adfs
), поэтому суффикс Controller
в этом случае правильный.