with net httpresponsemessage example error badrequest bad asp c# json asp.net-web-api json.net

c# - httpresponsemessage - cómo devolver json error msg en asp.net web api?



web api return error 500 (5)

Agregar config.Formatters.Remove (config.Formatters.XmlFormatter); línea en su archivo WebApiConfig

Me gustaría devolver un mensaje de error de json, pero por el momento en el violín no puedo ver esto en el panel json:

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

¿como hacer esto?


Algunos puntos:

Si todo lo que desea hacer es devolver una respuesta de error que contenga un mensaje de error simple, la API web proporciona un método CreateErrorResponse para eso. Entonces puedes simplemente hacer:

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

Esto dará como resultado la siguiente respuesta HTTP (otros encabezados omitidos por brevedad):

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

Si desea devolver un objeto personalizado en su lugar, utilice Request.CreateResponse como estaba haciendo, pero no use MVC JsonResult . En su lugar, simplemente pase su objeto directamente a CreateResponse :

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

Ahora, di que estás haciendo esto pero no estás recuperando a JSON del servidor. Es importante darse cuenta de que Web API normalmente utiliza la negociación del tipo de contenido para determinar qué formato usar al enviar la respuesta. Eso significa que mira el encabezado Accept que fue enviado por el cliente con la solicitud. Si el encabezado Accept contiene application/xml , por ejemplo, Web API devolverá XML. Si el encabezado contiene application/json , devolverá JSON. Por lo tanto, debe verificar que su cliente esté enviando el encabezado Accept correcto.

Dicho esto, hay formas de obligar a la API web a devolver siempre los datos en un formato específico si eso es lo que realmente desea. Puede hacer esto en el nivel de método utilizando una sobrecarga diferente de CreateResponse que también especifica el tipo de contenido:

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

Alternativamente, puede eliminar el formateador XML de la configuración por completo en su archivo WebApiConfig :

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

Esto obligará a la API web a usar siempre JSON independientemente de lo que el cliente solicite.


JsonResult es un concepto de MVC. No funciona en la API web. Una forma de devolver explícitamente el contenido json es usar la clase que creé en esta respuesta https://.com/a/20504951/6819


Puede establecer directamente el código de estado de la respuesta HTTP actual a través de la propiedad de respuesta

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


puedes devolver JSON como a continuación,

return Request.CreateResponse<ResponseApiModel>(HttpStatusCode.BadRequest, response);

Recomiendo usar IHttpActionResult en su tipo de retorno de método en lugar de HttpResponseMessage, si el tipo de devolución del método de su API es IHttpActionResult. puedes regresar como;

return Content(HttpStatusCode.InternalServerError, response);

también puede consultar ese enlace sobre las mejores prácticas de devolución de errores. Especialmente la respuesta de @ Daniel Little es realmente útil.

Sé que la respuesta se agregó a la tarde, pero tal vez sea una buena persona.