Ich versuche zu verstehen, wie RouteExistingFiles funktioniert. Also habe ich ein neues MVC 3 Internet-Projekt erstellt (MVC 4 verhält sich auf die gleiche Weise) und eine HTMLPage.html Datei in den Ordner Inhalt meines Projekts einfügen. Nun ging ich in die Datei Global.asax und bearbeitet die RegisterRoutes Funktion, so dass es wie folgt aussieht:ASP.NET MVC 3: RouteExistingFiles = True scheint keine Wirkung zu haben
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
);
}
Nun sollte es mir einen Fehler, wenn ich einen localhost bin anfordernden: XXXX/Content/HTMLPage.html Da es keinen "Content" -Controller gibt und die Anfrage definitiv das Standardmuster trifft. Aber stattdessen sehe ich meine HTML-Seite. Was mache ich hier falsch?
Update: Ich denke, ich muss aufgeben. Auch wenn ich hinzufüge, eine Route wie diese:
routes.MapRoute("", "Content/{*anything}", new {controller = "Home", action = "Index"});
es zeigt mir immer noch den Inhalt des Htmlpage. Wenn ich eine URL wie ~/Content/HTMLPage anfordere, erhalte ich die Indexseite wie erwartet, aber wenn ich eine Dateierweiterung wie .html oder .txt hinzufüge, wird der Inhalt angezeigt (oder ein Fehler 404, wenn die Datei nicht existiert). Wenn jemand dies in VS2012 überprüfen kann, lassen Sie mich bitte wissen, welches Ergebnis Sie erhalten. Danke.
Die Standardroute mit dem Muster "{controller}/{aktion}/{id}" sieht wie ein guter Kandidat für die Anforderung ~/Content/HTMLPage.html aus. Also gibt es eine passende Route. –
@OleksandrKaplun: Das passt nur, wenn Sie tatsächlich einen Controller namens "Content" und eine Aktionsmethode in diesem Controller namens "HTMLPage.html" haben. – Guffa
Es klingt überzeugend, funktioniert aber immer noch nicht. Hier ist, was ich oben in meiner RegisterRoutes-Funktion hinzugefügt habe: 'routes.MapRoute ( " ExactMatch ", " Inhalt/HTMLPage.html ", new {controller =" Home ", action =" Über "}); '. Zeigt mir immer noch den Inhalt der HTML-Seite. P.S. Ich verstehe, dass es so funktionieren sollte (das Handbuch sagt, dass es sollte), aber es ist einfach nicht so, ich vermute es ist etwas, was ich falsch gemacht habe. Ich teste lokal auf VS2012 und Windows 7. –