Używam MVC4 i trzeba trasie żądania takiego do kontrolera:Routing url z rozszerzeniem w MVC4 nie będzie działać, stara się służyć do pliku statycznego
[myapp]/data/fileinfo.xml
Oto trasa mam skonfigurowane:
routes.MapRoute(
name: "Data",
url: "Data/{file}",
defaults: new { controller = "Data", action = "fileinfo"}
);
teraz to działa perfekcyjnie i szlaki wnioski do mojego DataController jeżeli URL nie zawiera rozszerzenie .xml, ale tak szybko, jak to rozszerzenie jest używana, IIS próbuje służyć plik statyczny (zamiast routingu do kontrolera) i pojawia się błąd 404.
Przeczytałem mnóstwo pytań/odpowiedzi na temat tego problemu w Internecie, a każde rozwiązanie, które wypróbowałem, zawiodło.
Na przykład próbowałem używać RouteExistingFiles = true
podczas konfigurowania mojej kolekcji RouteCollection i dodałem <modules runAllManagedModulesForAllRequests="true" />
w web.config, ale bez skutku.
Jeśli ktoś ma pomysł na to, co powinienem wypróbować lub czego może mi brakować, byłoby to bardzo cenne. Korzystam z programów asp.Net 4.5, VS 2012 i IIS 8.0.
Dziękuję za odpowiedź, naprawdę to doceniam. :) Po wypróbowaniu tego, otrzymuję błąd 500 podczas przechodzenia do adresu URL. Komunikat o błędzie informuje, że IIS prawdopodobnie odebrał żądanie, a następnie w jakiś sposób nie działał z modułem, który obsługiwał żądanie (szczegóły dotyczące błędów odwołują się do ManagedDllExtension i modułu ManagedPipelineHandler, ale jest to zbyt mało precyzyjne, aby być dla mnie pomocnym). – user2445698
W międzyczasie znalazłem możliwe obejście (może nie być ładne, ale działa). Przechwytywam plik /data/fileinfo.xml w pliku Global.asax.cs i za pomocą metody Context.RewritePath() przycinam rozszerzenie. Wtedy routing może działać poprawnie. Jeszcze raz dziękuję za pomoc. – user2445698
Ach, szkoda - zadziałało idealnie na mojej maszynie :-). Cieszę się, że masz obejście. Zawsze możesz refactor w późniejszym terminie! –