2015-01-19 14 views
14

Ich entwickle eine sehr einfache Anwendung SPA Stil und ich möchte nicht Rasierer verwenden, also brauche ich es nur, um HTML-Dateien (aus dem Ordner wwwroot), außer wenn die js ruft meine API-Controller auf. In Web API 2 könnten Sie den Router veranlassen, HTML-Dateien zu ignorieren, so dass sie direkt z.Wie man Routen in MVC6 ignoriert

config.Routes.IgnoreRoute("Html", "{whatever}.html/{*pathInfo}"); 

ähnlich wie dieses Beispiel: http://www.strathweb.com/2014/04/ignoring-routes-asp-net-web-api/ ist die IgnoreRoute Funktionalität einfach nicht umgesetzt oder hat es sich verändert?

Im Moment, wenn ich app.UseMvc() habe; in meinem Startup.cs bekommen jede Anforderung an „/“ mir diese Ausnahme bekommt:

An unhandled exception occurred while processing the request. 
InvalidOperationException: The view 'Index' was not found. The following  locations were searched: 
/Views/Home/Index.cshtml 
/Views/Shared/Index.cshtml. 
Microsoft.AspNet.Mvc.Rendering.ViewEngineResult.EnsureSuccessful() 

Aber wenn ich es ohne MVC verlassen dient die Datei index.html, wenn Sie „/“ anfordern - natürlich meine API-Controller wird dann aber nicht funktionieren.

+1

Ich verstehe nicht, was meinst du, wenn Kommentar aus der app.UseMvc() es funktioniert gut, aber dann ist der Web-api wird natürlich nicht funktionieren? Können Sie bitte hier einen Beispielcode geben? – dotnetstep

+0

in meinem Wwwroot-Ordner Ich habe eine index.html-Datei, wenn ich MVC jede Anfrage an/html die HTML-Datei zu deaktivieren, wenn ich MVC in meiner App Anfragen an/in dieser Ausnahme auslösen: InvalidOperationException: Die Ansicht 'Index' war nicht gefunden. Die folgenden Speicherorte wurden durchsucht: /Views/Home/Index.cshtml /Views/Shared/Index.cshtml. –

+1

Sie wollen also, dass Index.html auch dann dienen soll, wenn MVC aktiviert ist.right? Meines Erachtens hat es nichts mit Ihrem Problem zu tun, denn wenn Sie die Site in IIS hosten und index.html als Standardseite erstellen, wird sie geliefert. – dotnetstep

Antwort

14

Ich denke, wenn Sie Index.html dienen möchten, auch wenn Ihre MVC-Option aktiviert ist? Wenn ja, müssen Sie eine Einstellung ändern.

Wenn Sie MVC aktivieren, wird eine Standardroute hinzugefügt, um nach Home/Index zu suchen, wenn Ihre URL wie http://localhost:yourport ist.

Wenn Sie MVC deaktivieren, wird index.html geliefert, da in diesem Fall keine Route vorhanden ist.

Wenn Sie also index.html bereitstellen möchten, wenn MVC aktiviert ist, fügen Sie Folgendes in der Funktion Konfigurieren hinzu, bevor Sie MVC verwenden.

app.UseDefaultFiles(new Microsoft.AspNet.StaticFiles.DefaultFilesOptions() { DefaultFileNames = new[] { "index.html" } }); 
// your UseMVC goes here. 
+0

Das funktioniert perfekt! Das ist eine ganz andere Art, es im Vergleich zu Web API 2.0 zu beheben, interessant. –

+4

IgnoreRoute ist noch nicht verfügbar. Es wird irgendwann in naher Zukunft online gehen, so dass es ohne die Middleware für statische Dateien funktionieren wird. Natürlich ist nichts falsch daran, es zu benutzen, nur daran denken, dass die Funktionalität nicht weg ist, nur nicht implementiert, –

+1

Auftrag ist super wichtig. Damit das Obige funktioniert, habe ich diese Reihenfolge verwendet. 'app.UseDefaultFiles(); app.UseStaticFiles(); app.UseMvc(); ' –

14
public void ConfigureServices(IServiceCollection services) 
{ 
    services.AddMvc(); 
} 

public void Configure(IApplicationBuilder app, IHostingEnvironment env) 
{ 
    app.UseDefaultFiles(); 
    app.UseStaticFiles(); 
    app.UseMvc(); 
} 
+1

Dies funktionierte für mich mit der neuesten aktuellen Version von MVC 6 (9/5/2015) – Anonymous

+1

Ich musste Paket hinzufügen Microsoft.AspNet.StaticFiles (Danke Resharper!) –

+0

Dies scheint nicht arbeite für mich in MVC 6 mit .NET Core RC2. Gibt es eine .NET Core RC2-Version? – Samir