web-dev-qa-db-fra.com

Comment définir le code d'état HTTP depuis ASP.NET MVC 3?

Nous utilisons des bibliothèques OpenWeb js sur le client, et le groupe intermédiaire .NET a besoin de leur envoyer un code d'état d'en-tête HTTP spécifique lorsque certains types d'erreur se produisent. J'ai essayé d'y parvenir en faisant ceci:

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);
}

Cela a fonctionné à moitié. Voir la capture d'écran: Code de statut http http://zerogravpro.com/temp/pic.png

Remarquez que j'ai atteint le code de statut 400 dans l'en-tête de réponse, mais j'ai vraiment besoin du code 400 dans l'en-tête de demande. Au lieu de cela, je reçois "200 OK". Comment puis-je atteindre cet objectif?

Ma structure d'URL pour effectuer l'appel est simple:/Main/TestError/400

49
HerrimanCoder

La discussion est longue à Quelle est la bonne façon d’envoyer une réponse HTTP 404 à partir d’une action ASP.NET MVC?

Ce que vous voulez faire, c'est définir Response.StatusCode au lieu d'ajouter un en-tête.

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

Si vous souhaitez uniquement renvoyer le code d'erreur, vous pouvez procéder comme suit:

public ActionResult TestError(string id) // id = error code 
{ 
      return new HttpStatusCodeResult(id, "You broke the Internet!");
}

Référence: Article MSDN sur Mvc.HttpStatusCodeResult .

Sinon, si vous souhaitez renvoyer d'autres informations, utilisez

Response.StatusCode = id

au lieu de

Response.AddHeader("Status Code", id); 
60
Nick Jones

Si vous ne pouvez pas obtenir votre résultat JSON dans votre vue, essayez d'ajouter ceci:

Response.TrySkipIisCustomErrors = true;

Avant ça :

Response.StatusCode = 400;

Plus de détails sur ce post: https://stackoverflow.com/a/37313866/9223103

0
Ludo.C