Wir verwenden OpenWeb-js-Bibliotheken im Frontend, und die .NET-Mittelschicht muss ihnen einen bestimmten HTTP-Header-Statuscode senden, wenn bestimmte Arten von Fehlern auftreten. Ich habe versucht, dies zu erreichen:
public ActionResult TestError(string id) // id = error code
{
Request.Headers.Add("Status Code", id);
Response.AddHeader("Status Code", id);
var error = new Error();
error.ErrorID = 123;
error.Level = 2;
error.Message = "You broke the Internet!";
return Json(error, JsonRequestBehavior.AllowGet);
}
Es hat halbwegs funktioniert. Siehe Screenshot: http-Statuscode http://zerogravpro.com/temp/pic.png
Hinweis Ich habe den Statuscode 400 im Antwortheader erreicht, aber ich brauche den 400 wirklich im Anforderungsheader. Stattdessen bekomme ich "200 OK". Wie kann ich das erreichen?
Meine URL-Struktur für den Aufruf ist einfach:/Main/TestError/400
Es gibt eine erweiterte Diskussion unter Wie kann eine HTTP-404-Antwort von einer ASP.NET-MVC-Aktion ordnungsgemäß gesendet werden?
Sie möchten Response.StatusCode
setzen, anstatt einen Header hinzuzufügen.
public ActionResult TestError(string id) // id = error code
{
Response.StatusCode = 400; // Replace .AddHeader
var error = new Error(); // Create class Error() w/ prop
error.ErrorID = 123;
error.Level = 2;
error.Message = "You broke the Internet!";
return Json(error, JsonRequestBehavior.AllowGet);
}
Wenn Sie nur den Fehlercode zurückgeben möchten, können Sie Folgendes tun:
public ActionResult TestError(string id) // id = error code
{
return new HttpStatusCodeResult(id, "You broke the Internet!");
}
Referenz: MSDN-Artikel zu Mvc.HttpStatusCodeResult .
Ansonsten, wenn Sie andere Informationen zurückgeben möchten, verwenden Sie
Response.StatusCode = id
anstatt
Response.AddHeader("Status Code", id);
Wenn Sie Ihr Json-Ergebnis nicht in Ihre Ansicht bringen können, fügen Sie Folgendes hinzu:
Response.TrySkipIisCustomErrors = true;
Vor dem :
Response.StatusCode = 400;
Weitere Details zu diesem Beitrag: https://stackoverflow.com/a/37313866/9223103