MVC 6 Routing -, SPA-fallback + 404-Fehler-Seite
Mit RC1 von ASP.NET Core 1.0 MVC 6 Sie können die Karte Routen innerhalb Ihrer Startup.Configure
Funktion beim Aufruf app.UseMvc
. Ich habe zugeordnet, ein "spa-fallback" - route, die sicherstellen, dass die HomeController
und Index
anzeigen werden die Standardeinstellungen wie folgt:
public void Configure(IApplicationBuilder app,
IHostingEnvironment env,
ILoggerFactory loggerFactory)
{
//... omitted for brevity
app.UseExceptionHandler("/Home/Error");
app.UseStatusCodePagesWithRedirects("/Home/Error/{0}");
app.UseMvc(routes =>
{
routes.MapRoute("default", "{controller=Home}/{action=Index}/{id?}");
routes.MapRoute("spa-fallback", "{*anything}", new { controller = "Home", action = "Index" });
routes.MapWebApiRoute("defaultApi", "api/{controller}/{id?}");
});
}
Wünsche ich den fallback, so dass meine Angular2 app die Routen führen nicht zu einem HTTP-Status-Code von 404, Nicht Gefunden. Aber ich muss auch korrekt verarbeitet, wenn ein Benutzer nicht versehentlich versuchen, navigieren Sie zu einer Seite anzeigen, der nicht existiert. Sie werden vielleicht bemerken, dass ich auch als app.UseStatusCodePagesWithRedirects("/Home/Error/{0}");
.
Dem Aufruf zur Weiterleitung auf meine Fehlerseite mit dem status-code und das "spa-fallback" - route scheinen sich gegenseitig ausschließen, d.h. es wird angezeigt, dass ich nur noch den einen oder anderen (aber leider nicht beide). Weiß jemand wie ich das bewältigen könnte, haben wir das beste aus beiden Welten?
- Derzeit ist das neue Paket finden Sie in "Microsoft.AspNetCore.SpaServices": "1.0.0-beta-000005".
- Ich sah, dass... danke
- würden Sie in Erwägung ziehen, die akzeptierte Antwort? Und versuchte meine street cred 😉
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es dauerte einige Zeit, um herauszufinden, wie Sie dies tun, ohne die mein index mit MVC und noch erhalten 404 für fehlende Dateien. Hier ist meine http-pipeline:
index.html
.context => context.Response.StatusCode == 404 && !Path.HasExtension(context.Request.Path.Value)
context.Response.StatusCode == 404 &&
Teil, wie ich war immer 200 für alle Anforderungen sonst.Kam ich mit zwei mögliche workarounds/Lösungen.
ASP.NET Kern 1.0, RC1
Mit Angular2 speziell, wir können einfach die swap -
LocationStrategy
. Zum Beispiel in meinemwwwroot/app/boot.ts
habe ich Folgendes:Beachten Sie, dass ich unter Verwendung der
provide
Funktion zum überschreiben der standard -LocationStrategy
mit derHashLocationStrategy
. Dies fügt die#
in der URL und verhindert, dass MVC nicht fälschlicherweise werfen 404, aber auch korrekt behandelt reagiert mit 404, wenn der Benutzer manuell Typen in einer URL, der nicht existiert.ASP.NET Core 1.0 RC2
Verwenden Sie einfach
Microsoft.AspNet.NodeServices
. In der Bibliothek gibt es sowohlAngularServices
undReactServices
die es ermöglichen, die Zuordnung der SPA-Routen, die speziell, über dieMapSpaFallbackRoute
Funktion. Ich behaupte, dass wir müssen warten, bis RC2 mit dem Verständnis, dass die aktuelle Implementierungen nicht vollständig funktioniert, wie gewünscht.Versuchen Sie dies:
app.Run() fängt alle Anfragen, die nicht beliebige Routen definiert haben. Auf diese Weise können Sie Ihre eigene spa-fallback und mit app.UseStatusCodePagesWithRedirects() in der gleichen Zeit.