Запретить обработчику статических файлов перехватывать URL-адрес, похожий на имя файла
В моем веб-приложении у меня есть маршрут, который выглядит следующим образом:
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 Debugger от Phil Haack не работает. Это просто 404 без дополнительной информации, кроме того, что IIS пытался получить доступ к физическому файлу, которого там нет.
У кого-нибудь есть решение для этого? Я просто хочу, чтобы этот URL был направлен на действие контроллера.
П.С .: Яне 100% уверен, что причиной было обновление до MVC4, это было только предположение, потому что ошибка произошла примерно в то же время, что и обновление, и тот же маршрут работает в другом проекте, который все еще использует MVC3.
Редактировать:
У меня есть обычайControllerFactory
которому нужно полное имя класса (AdfsController
вместоAdfs
), поэтому суффиксController
правильно в этом случае.