2012-09-14 3 views
10

Ich habe eine MVC4-App, aber ich verwende sie hauptsächlich für die WebAPI-Teile. Ich möchte eine "plain old HTML" -Datei an den Benutzer senden lassen (die dann KnockoutJS oder KendoUI verwendet, um JSON von den Webapi-Controllern zu ziehen).MVC4 - Gibt es eine Möglichkeit, den Stamm zu einer "normalen" unverarbeiteten HTML-Seite zu routen?

Ich weiß, ich kann dies tun:

routes.IgnoreRoute("{page}.html"); 

Und dann, wenn ich auf „localhost/index.html“ zu sehen ist es erfolgreich nur meine HTML-Seite zurück. Allerdings möchte ich wirklich den "root" Standardpfad "localhost /" zuordnen, um meine index.html zurückzugeben.

Ich versuchte dies:

routes.MapPageRoute("root", "", "~/index.html"); 

aber das wirft den Fehler:

There is no build provider registered for the extension '.html'. You can register one in the <compilation><buildProviders> section in machine.config or web.config. Make sure is has a BuildProviderAppliesToAttribute attribute which includes the value 'Web' or 'All'.

Wer irgendwelche Ideen, wie ich diese Arbeit machen kann? Ich könnte einfach einen Standard-Controller drücken, der eine reine HTML-Seite zurückgibt, aber es scheint übertrieben zu sein, den gesamten ASP.NET-Stack einmal für die HTML-Seite zu durchlaufen, die dann einfach eine WebAPI-URL aufruft, um durch den ASP.NET-Stack zurückzugehen um einige JSON-Daten für das Modell der Seite zu erhalten.

Ich möchte im Grunde nur, um alle MVC Sanitär „überspringen“ und haben IIS mir die HTML-Seite zurückschicken, als ob es nicht eine ASP.NET app war, oder zumindest möglichst wenig Verarbeitung tun.

+0

Aber wenn man auf die MVC Routen erhalten, haben Sie bereits ASP.Net erreicht. Wenn IIS damit umgehen soll, müssen Sie es auf Serverebene mit Rewrite-Regeln und so einrichten. – McGarnagle

+0

Ja, und ich bin damit einverstanden, ASP.NET etwas zu berühren. Ich dachte nur, dass ein leerer Controller Overkill ist. Mit der Ignore-Route muss es den Controller und die View zumindest nicht instanziieren und aufrufen. – CodingWithSpike

Antwort

12

Folgendes Ihre Routing-Konfiguration hinzufügen:

routes.IgnoreRoute(""); 
+0

Ah, natürlich! So einfach, warum habe ich nicht daran gedacht! :) Vielen Dank! – CodingWithSpike

+0

Wenn ich ein einfaches WebApi-Projekt erstelle, eine index.html hinzufüge und auch die obige Zeile in meiner RouteConfig-Klasse hinzufüge, bekomme ich eine 404-Seite, fehlt mir etwas? – AlexandruC

+0

A.K sollten Sie die 'routes.IgnoreRoute (" ");' vor Ihren anderen Routen hinzufügen. – bonh

Verwandte Themen