Comment définir le code d’état HTTP à partir d’ASP.NET MVC 3?

Nous utilisons les bibliothèques OpenWeb js sur le frontend, et elles ont besoin que le niveau intermédiaire .NET leur envoie un code d’état d’en-tête HTTP spécifique lorsque certains types d’erreurs se produisent. J’ai essayé de réaliser cela en faisant ceci:

public ActionResult TestError(ssortingng 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); } 

C’est à moitié travaillé. Voir la capture d’écran: http status code http://zerogravpro.com/temp/pic.png

Notez que j’ai obtenu le code d’état de 400 dans l’en-tête de réponse, mais j’ai vraiment besoin du 400 dans l’en-tête de demande. Au lieu de cela, je reçois “200 OK”. Comment puis-je atteindre cet objective?

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

Une discussion approfondie a lieu sur 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 est de définir Response.StatusCode au lieu d’append un en-tête.

 public ActionResult TestError(ssortingng 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); } 

Si tout ce que vous voulez retourner est le code d’erreur, vous pouvez effectuer les opérations suivantes:

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

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

Sinon, si vous souhaitez retourner d’autres informations, utilisez

 Response.StatusCode = id 

au lieu de

 Response.AddHeader("Status Code", id); 

Si vous ne pouvez pas obtenir votre résultat json dans votre vue, essayez d’append ceci:

 Response.TrySkipIisCustomErrors = true; 

Avant ça :

 Response.StatusCode = 400; 

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