Comment renvoyer msg erreur msg dans asp.net Web Api?

Je voudrais renvoyer un message d’erreur json, mais pour le moment, je ne peux pas le voir dans le panneau Json

ssortingng error = "An error just happened"; JsonResult jsonResult = new JsonResult { Data = error, JsonRequestBehavior = JsonRequestBehavior.AllowGet }; response = Request.CreateResponse(HttpStatusCode.BadRequest, jsonResult.Data); 

comment faire ça?

Quelques points:

Si vous ne souhaitez que renvoyer une réponse d’erreur contenant un simple message d’erreur, l’API Web fournit une méthode CreateErrorResponse pour cela. Alors vous pouvez simplement faire:

 return Request.CreateErrorResponse(HttpStatusCode.BadRequest, "An error just happened"); 

Cela entraînera la réponse HTTP suivante (autres en-têtes omis pour des raisons de brièveté):

 HTTP/1.1 400 Bad Request Content-Type: application/json; charset=utf-8 Content-Length: 36 {"Message":"An error just happened"} 

Si vous souhaitez plutôt renvoyer un object personnalisé, vous utilisez Request.CreateResponse comme vous le faites, mais n’utilisez pas MVC JsonResult . Au lieu de cela, passez votre object directement à CreateResponse :

 var myError = new { Data = "An error just happened", OtherDetails = "foo bar baz" }; return Request.CreateResponse(HttpStatusCode.BadRequest, myError); 

Maintenant, supposons que vous le fassiez, mais que vous ne récupériez pas JSON du serveur. Il est important de comprendre que l’API Web utilise normalement la négociation du type de contenu pour déterminer le format à utiliser lors du renvoi de la réponse. Cela signifie que cela examine l’en-tête Accept qui a été envoyé par le client avec la demande. Si, par exemple, l’en-tête Accept contient application/xml , Web API renvoie XML. Si l’en-tête contient application/json il retournera JSON. Donc, vous devriez vérifier que votre client envoie le bon en-tête Accept .

Cela dit, il est possible de forcer Web API à toujours renvoyer les données dans un format spécifique si vous le souhaitez vraiment. Vous pouvez le faire au niveau de la méthode en utilisant une surcharge différente de CreateResponse qui spécifie également le type de contenu:

 return Request.CreateResponse(HttpStatusCode.BadRequest, myError, new System.Net.Http.Headers.MediaTypeHeaderValue("application/json")); 

Vous pouvez également supprimer le formateur XML de la configuration dans votre fichier WebApiConfig :

 config.Formatters.Remove(config.Formatters.XmlFormatter); 

Cela forcera l’API Web à toujours utiliser JSON indépendamment de ce que le client demande.

vous pouvez retourner JSON comme ci-dessous,

  return Request.CreateResponse(HttpStatusCode.BadRequest, response); 

Je recommande d’utiliser IHttpActionResult sur le type de retour de votre méthode à la place de HttpResponseMessage, si le type de retour de la méthode de votre api est IHttpActionResult. vous pouvez revenir comme;

  return Content(HttpStatusCode.InternalServerError, response); 

vous pouvez également vérifier que ce lien sur la meilleure pratique en matière d’ erreur de renvoi est particulièrement utile. La réponse de @Daniel Little est vraiment utile.

Je sais que la réponse a été ajoutée trop tard, mais peut-être aider quelqu’un.

JsonResult est un concept MVC. Cela ne fonctionne pas dans l’API Web. Une façon de renvoyer explicitement le contenu json consiste à utiliser la classe que j’ai créée dans cette réponse https://stackoverflow.com/a/20504951/6819

Ajoutez config.Formatters.Remove (config.Formatters.XmlFormatter); ligne dans votre fichier WebApiConfig

Vous pouvez directement définir le code de statut de la réponse HTTP actuelle via la propriété Response

 Response.StatusCod = (int)HttpStatusCode.BadRequest; return Json(HttpStatusCode.BadRequest);