Próbuję zrozumieć, jak działa RouteExistingFiles. Stworzyłem nowy projekt internetowy MVC 3 (MVC 4 zachowuje się w ten sam sposób) i umieść plik HTMLPage.html w folderze Treść mojego projektu. Teraz poszłam do pliku Global.asax i edytowane funkcję RegisterRoutes więc wygląda to tak:ASP.NET MVC 3: RouteExistingFiles = true wydaje się nie mieć żadnego efektu
public static void RegisterRoutes(RouteCollection routes)
{
routes.RouteExistingFiles = true; //Look for routes before looking if a static file exists
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new {controller = "Home", action = "Index", id = UrlParameter.Optional} // Parameter defaults
);
}
Teraz powinien dać mi błąd, gdy jestem z prośbą o localhost: XXXX/Content/HTMLPage.html ponieważ nie ma kontrolera "Treść", a żądanie zdecydowanie uderza w domyślny wzorzec. Ale zamiast tego widzę moją stronę HTML. Co ja tu robię źle?
Aktualizacja: Myślę, że będę musiał zrezygnować. Nawet jeśli Dodaję trasą jak ten:
routes.MapRoute("", "Content/{*anything}", new {controller = "Home", action = "Index"});
nadal pokazuje mi zawartość HTMLPage. Gdy żądam adresu URL, takiego jak ~/Content/HTMLPage, uzyskuję stronę indeksu zgodnie z oczekiwaniami, ale kiedy dodaję rozszerzenie plików takie jak .html lub .txt wyświetlana jest zawartość (lub błąd 404, jeśli plik nie istnieje). Jeśli ktokolwiek może to sprawdzić w VS2012, proszę dać mi znać, jaki masz wynik. Dziękuję.
Trasa domyślna z wzorcem "{kontroler}/{akcja}/{id}" wygląda na dobrego kandydata do żądania ~/Content/HTMLPage.html. Tak więc istnieje pasująca trasa. –
@OleksandrKaplun: To pasuje tylko, jeśli faktycznie masz kontroler o nazwie "Treść" i metodę działania w tym kontrolerze o nazwie "HTMLPage.html". – Guffa
Brzmi przekonująco, ale nadal nie działa. Oto, co dodałem do mojej funkcji RegisterRoutes: 'routes.MapRoute ( " ExactMatch ", " Content/HTMLPage.html ", nowy {controller =" Strona główna ", akcja =" Informacje "}}); '. Wciąż pokazuje mi zawartość strony html. P.S. Rozumiem, że powinno działać tak (instrukcja mówi, że powinna), ale tak nie jest, więc domyślam się, że to coś, co zrobiłem źle. Testuję lokalnie na VS2012 i Windows 7. –