Ich versuche, meine 404s richtig zu funktionieren, aber nicht herausfinden, wie man es richtig macht.Zurück 404 Seite ohne Umleitung
Zunächst stellte ich meinen folgende in meiner statup Configure-Methode:
app.UseMvc(routes =>
{
// routing here
});
app.Use((context, next) =>
{
context.Response.StatusCode = 404;
return next();
});
app.UseStatusCodePagesWithRedirects("/error/{0}");
, die zu einer Seite weitergeleitet, wo ich den Fehler zeigte. Die Statuscodes waren jedoch 302 > 200
. Ich setze die /error/{code}
Aktion, um den relevanten Statuscode zurückzugeben, so jetzt habe ich 302 > 404
, die (wegen der Umleitung 302) es so aussehen lässt, als ob die /error/404
Seite nicht existiert (was sie tut).
Ich möchte die Fehlerseite ohne die Umleitung zurückgeben, so dass der Versuch, /doesntexist
anzufordern, 404 zurückgibt und die Fehlerseite anzeigt.
Das andere, was ich versuchte, ist app.UseStatusCodePagesWithReExecute("/error/{0}");
zu verwenden, die eine 404 zurückgibt, ohne die URL zu ändern, sondern zeigt nur eine leere Seite statt meine Fehlerseite
Es sieht aus wie Sie die Middleware an die Pipeline in umgekehrter Reihenfolge hinzugefügt haben. MVC sollte immer der letzte in der Pipeline sein, da es sich um eine "terminale" Middleware handelt, was bedeutet, dass eine Anfrage niemals fallen wird. – khellang
Unbehandelte Anfragen (die in MVC keiner bestimmten Route entsprechen) werden definitiv gerade durchlaufen. Wenn es Terminal wäre, würde es nicht auf die Aktion "/ error" umleiten. –
Ja, Sie haben Recht. Es * fällt * für unbehandelte Routen durch: https://github.com/aspnet/Routing/blob/02c92c6f929f1241683a3bb8bad027237f2f679c/src/Microsoft.AspNetCore.Routing/RouterMiddleware.cs#L39. Die Reihenfolge Ihrer Middleware ist jedoch immer noch falsch. Der 'UseStatusCodePages' MW sollte immer vor dem' UseMvc' MW liegen. – khellang