Para regresar de un controlador Web API 2, puedo devolver contenido con la respuesta si la respuesta es correcta (estado 200) de esta manera:
public IHttpActionResult Get()
{
string myResult = ...
return Ok(myResult);
}
Si es posible, quiero usar los tipos de resultados integrados aquí cuando sea posible: https://msdn.microsoft.com/en-us/library/system.web.http.results(v=vs.118).aspx
Mi pregunta es, para otro tipo de respuesta (no 200), ¿cómo puedo devolver un mensaje (cadena) con él? Por ejemplo, puedo hacer esto:
public IHttpActionResult Get()
{
return InternalServerError();
}
pero no esto:
public IHttpActionResult Get()
{
return InternalServerError("Message describing the error here");
}
Idealmente, quiero que esto se generalice para poder enviar un mensaje de vuelta con cualquiera de las implementaciones de IHttpActionResult.
¿Necesito hacer esto (y construir mi propio mensaje de respuesta):
public IHttpActionResult Get()
{
HttpResponseMessage responseMessage = ...
return ResponseMessage(responseMessage);
}
¿O hay un mejor camino?
c#
asp.net-web-api
httpresponse
mayabelle
fuente
fuente
ApiController.InternalServerError
msdn.microsoft.com/en-us/library/dn292630(v=vs.118).aspxRespuestas:
Puedes usar esto:
fuente
code
(donde el código es una cadena)return Content(HttpStatusCode.OK, code)
se encapsula en "que es inesperado, ¿hay alguna razón para esto? Por ejemplo, el valor que se devuelve es"\"value\""
que estoy usando mvc5Puede usar HttpRequestMessagesExtensions.CreateErrorResponse (
System.Net.Http
espacio de nombres), así:Es preferible crear respuestas basadas en la solicitud para aprovechar la negociación de contenido de la API web.
fuente
ApiController.Request
es nulo, significa que no está en el contexto correcto, o algo está roto en su arquitectura WebAPI.Terminé yendo con la siguiente solución:
... que se puede usar así:
Estoy abierto a sugerencias de mejora. :)
fuente
También puedes hacer:
fuente
Cualquiera que esté interesado en devolver algo con cualquier código de estado con ResponseMessage:
fuente
En ASP.NET Web API 2, puede ajustar cualquiera
ResponseMessage
en un ResponseMessageResult :En algunos casos, esta puede ser la forma más sencilla de obtener el resultado deseado, aunque en general puede ser preferible utilizar los diversos resultados en System.Web.Http.Results .
fuente
Sencillo:
return ResponseMessage(Request.CreateErrorResponse(HttpStatusCode.InternalServerError, "Your message"));
Recuerde hacer referencia a System.Net.Http y System.Net .
fuente
Recomiendo leer esta publicación. Hay muchas formas de usar HttpResponse existente como se sugiere, pero si desea aprovechar Web Api 2, entonces considere usar algunas de las opciones integradas de IHttpActionResult como
o
Elija el tipo de retorno correcto para los controladores de API web
fuente
Un ejemplo más detallado con soporte de código HTTP no definido en C #
HttpStatusCode
.Content
es un método virtual definido en clase abstractaApiController
, la base del controlador. Vea la declaración a continuación:fuente
@mayabelle puedes crear concreto IHttpActionResult y envolver esos códigos de esta manera:
fuente
Yo tuve el mismo problema. Quiero crear un resultado personalizado para mis controladores api, para llamarlos como
return Ok("some text");
Luego hice esto: 1) Crear un tipo de resultado personalizado con singletone
2) Crear controlador personalizado con nuevo método:
Y luego puedo llamarlos en mis controladores, así:
fuente
Esta respuesta se basa en la respuesta de Shamil Yakupov, con objeto real en lugar de cadena.
fuente
Por excepciones, generalmente hago
fuente
Las cosas anteriores son realmente útiles.
Al crear servicios web, si toma el caso de los servicios, el consumidor lo apreciará mucho. Traté de mantener la uniformidad de la salida. También puede dar un comentario o un mensaje de error real. El consumidor del servicio web solo puede verificar que IsSuccess sea verdadero o no, de lo contrario se asegurará de que haya un problema y actuará según la situación.
Le invitamos a dar sugerencias si las hay :)
fuente
Perdón por la respuesta tardía, ¿por qué no usas simplemente
return BadRequest("your message");
Lo uso para todos mis
IHttpActionResult
errores, funciona bienAquí está la documentación: https://msdn.microsoft.com/en-us/library/system.web.http.apicontroller.badrequest(v=vs.118).aspx
fuente
400
respuesta sería inapropiada. OP dio específicamente una500
respuesta como ejemplo.