Ich habe ein bisschen Code, der die Fehlerbehandlung für mich durchführt, um abhängig vom empfangenen Fehler bestimmte Ansichten anzuzeigen.C# MVC Ermitteln des erfolgreichen HTTP-Statuscodes
Mein Code sieht wie folgt aus:
protected void Application_EndRequest()
{
var response = new HttpResponseMessage((HttpStatusCode)Context.Response.StatusCode);
if (!response.IsSuccessStatusCode)
{
var rd = new RouteData();
IController c = new ErrorController();
switch (response.StatusCode)
{
case HttpStatusCode.BadRequest:
Response.Clear();
rd.Values["controller"] = "Error";
rd.Values["action"] = "BadRequest";
c.Execute(new RequestContext(new HttpContextWrapper(Context), rd));
break;
case HttpStatusCode.NotFound:
Response.Clear();
rd.Values["controller"] = "Error";
rd.Values["action"] = "NotFound";
c.Execute(new RequestContext(new HttpContextWrapper(Context), rd));
break;
case HttpStatusCode.InternalServerError:
Response.Clear();
rd.Values["controller"] = "Error";
rd.Values["action"] = "InternalServerError";
c.Execute(new RequestContext(new HttpContextWrapper(Context), rd));
break;
case HttpStatusCode.Forbidden:
Response.Clear();
rd.Values["controller"] = "Error";
rd.Values["action"] = "Forbidden";
c.Execute(new RequestContext(new HttpContextWrapper(Context), rd));
break;
default:
Response.Clear();
rd.Values["controller"] = "Error";
rd.Values["action"] = "GenericError";
c.Execute(new RequestContext(new HttpContextWrapper(Context), rd));
break;
}
}
Dies funktioniert für Standard-HTTP-Statuscodes und wie in der Dokumentation definiert sind, und Antwortcode von 200-299 doesnt bekommen behandelt und durchläuft.
Allerdings ist meine Frage, ist dies der beste Weg, es zu tun?
Dies ergab sich aus einer meiner Anfragen mit einem Statuscode von 302 - Gefunden. Nun, nach der Dokumentation würde dies nicht als erfolgreicher Code klassifiziert werden, aber ich sehe nicht, wie es nicht als erfolgreich eingestuft werden kann.
Gibt es also einen besseren Weg, um alle erfolgreichen Codes als nur 200-299 zu berücksichtigen?
Vielen Dank für Ihre Anregungen und Meinungen. Ich verstehe, dass es keine absolute Antwort darauf geben kann.
Putting 1 Vorschlag da draußen wäre, die if-Anweisung zu ändern:
if(!(statuscode >= 400 && statuscode <= 599)
Dies liegt daran, 4xx-Codes als Client Fehler und 5xx-Codes definiert sind, werden als Server-Fehler definiert. Deshalb sollte es sie alle fangen ??
Aber was ist mit dem gefürchteten 418 zu tun? :)
EDIT
habe ich versucht, mit httperrors:
<httpErrors errorMode="Custom" existingResponse="Replace">
<clear/>
<error path="/Error/NotFound" responseMode="ExecuteURL" statusCode="400"/>
</httpErrors>
Neben custom in web.config:
<customErrors mode="On" defaultRedirect="~/Error">
<error statusCode="404" redirect="~/Error/NotFound" />
<error statusCode="403" redirect="~/Error/Forbidden" />
<error statusCode="500" redirect="~/Error/InternalServerError" />
</customErrors>
Beide ohne Glück
Sie wissen, dass Sie dies einfach tun [in web.config] (http://benfoster.io/blog/aspnet-mvc-custom-error-pages)? – Smudge202
Verwenden Sie IIS7 +? Wenn ja, versuchen Sie nur mit httpErrors zu arbeiten. – Chris
Ich habe sie separat ausprobiert. Ich glaube, dass ich eine frühere Version von iis – DaRoGa