wake-up-neo.net

Wie kann ich den HTTP-Statuscode von ASP.NET MVC 3 festlegen?

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

49
HerrimanCoder

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);
}
92
Steve Czetty

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); 
60
Nick Jones

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

0
Ludo.C