c# - net - Mejor enfoque de API web para devolver HttpResponseMessage
web api c# (3)
Aunque esto no responde directamente la pregunta, quería proporcionar alguna información que encontré útil. http://weblogs.asp.net/dwahlin/archive/2013/11/11/new-features-in-asp-net-web-api-2-part-i.aspx
El HttpResponseMessage ha sido más o menos reemplazado por IHttpActionResult. Es mucho más limpio y más fácil de usar.
public IHttpActionResult Get()
{
Object obj = new Object();
if (obj == null)
return NotFound();
return Ok(obj);
}
Luego puede encapsular para crear elementos personalizados. ¿Cómo establecer encabezados personalizados cuando se usa IHttpActionResult?
Todavía no he encontrado la necesidad de implementar un resultado personalizado, pero cuando lo haga, seguiré esta ruta.
Es probablemente muy similar a usar el anterior también.
Para ampliar más esto y proporcionar un poco más de información. También puede incluir mensajes con algunas de las solicitudes. Por ejemplo.
return BadRequest("Custom Message Here");
No puede hacer esto con muchos de los otros, pero ayuda con los mensajes comunes que desea devolver.
Tengo un proyecto de API web y mis métodos siempre devuelven HttpResponseMessage .
Entonces, si funciona o falla, regreso:
Sin errores:
return Request.CreateResponse(HttpStatusCode.OK,"File was processed.");
Cualquier error o falla
return Request.CreateResponse(HttpStatusCode.NoContent, "The file has no content or rows to process.");
Cuando devuelvo un objeto, utilizo:
return Request.CreateResponse(HttpStatusCode.OK, user);
Me gustaría saber cómo puedo devolver a mi cliente HTML5 una mejor reposesión encapsulada, para que pueda devolver más información sobre la transacción, etc.
Estaba pensando en crear una clase personalizada que pueda encapsular el HttpResponseMessage pero también tenga más datos.
¿Alguien ha implementado algo similar?
Puede devolver una respuesta de error para proporcionar más detalles.
public HttpResponseMessage Get()
{
HttpError myCustomError = new HttpError("The file has no content or rows to process.") { { "CustomErrorCode", 42 } };
return Request.CreateErrorResponse(HttpStatusCode.BadRequest, myCustomError);
}
Volvería:
{
"Message": "The file has no content or rows to process.",
"CustomErrorCode": 42
}
Más detalles aquí: http://blogs.msdn.com/b/youssefm/archive/2012/06/28/error-handling-in-asp-net-webapi.aspx
También uso http://en.wikipedia.org/wiki/List_of_HTTP_status_codes para ayudarme a determinar qué código de estado http devolver.
Una nota importante: ¡No coloque contenido en 204 respuestas! No solo está en contra de la especificación HTTP, sino que .NET puede comportarse de manera inesperada si lo hace.
Por error, utilicé return Request.CreateResponse(HttpStatusCode.NoContent, null);
y condujo a un verdadero dolor de cabeza; las solicitudes futuras de la misma sesión se interrumpirían debido a que el valor de la cadena "null"
anteponía a la respuesta. Supongo que .NET no siempre borra por completo el objeto de respuesta para las llamadas API de la misma sesión.