Zapobiegaj przechwytywaniu przez statyczny program obsługi plików adresu URL podobnego do nazwy pliku

W mojej aplikacji internetowej mam trasę, która wygląda tak:

routeCollection.MapRoute(
    "AdfsMetadata",                                                // name
    "FederationMetadata/2007-06/FederationMetadata.xml",           // url
    new { controller = "AdfsController", action = "MetaData" });   // defaults

Ideą tej trasy była lepsza praca z serwerem Microsoft AD FS (2.0+), który wyszukuje metadane AD FS w tym momencie, gdy tylko określisz nazwę hosta. Z MVC3 wszystko działało dobrze. Ale niedawno zaktualizowaliśmy projekt do MVC4, a teraz wywołanie tego adresu URL prowadzi do 404, procedura obsługi wymieniona na stronie błędu toStaticFile a ścieżka fizyczna jestD:\path\to\my\project\FederationMetadata\2007-06\FederationMetadata.xml. Zakładam, że MVC lub ASP.NET „myśli”, że musi to być żądanie dla pliku statycznego i szuka pliku, ale nie jest to plik. Dane są generowane dynamicznie - dlatego przekierowałem adres URL do akcji kontrolera. Problem polega na tym, że nawet Debugger tras przez Phila Haacka nie działa. To tylko 404 bez żadnych dodatkowych informacji, poza tym IIS próbował uzyskać dostęp do fizycznego pliku, którego tam nie ma.

Czy ktoś ma na to rozwiązanie? Chcę, aby ten adres URL był kierowany do akcji kontrolera.

P. .: Jestemnie 100% pewność, że przyczyną było uaktualnienie do MVC4, było to tylko zgadywanie, ponieważ błąd wystąpił mniej więcej w tym samym czasie, co aktualizacja, i ta sama trasa działa w innym projekcie, który nadal używa MVC3.

Edytować:

Mam zwyczajControllerFactory który potrzebuje pełnej nazwy klasy (AdfsController zamiastAdfs), więc przyrostekController jest w tym przypadku poprawne.

questionAnswers(2)

yourAnswerToTheQuestion