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