Pregunta Usando HttpContext.Current en ASP.NET WebAPI


Quiero lidiar con las excepciones en un método de acción de WebAPI, capturándolos configurando el código de estado y escribiendo un mensaje en la respuesta. Normalmente en un MVC normal Controller Yo haría esto así, usando Controlleres Response propiedad:

Response.StatusCode = 404;
Response.Write("Whatever");

Sin embargo, parece ApiController no tiene ninguna Response propiedad. ¿Hay alguna razón para esto? ¿Está bien simplemente usar HttpContext.Current.Response Me gusta esto:?

HttpContext.Current.Response.StatusCode = 404;
HttpContext.Current.Response.Write("Whatever");

¿O hay una forma específica de escribir en la respuesta de un controlador WebAPI?


5
2017-08-31 16:19


origen


Respuestas:


Se supone que el método de acción crea el objeto de respuesta. O simplemente haz un nuevo HttpResponseMessage o llama a este.CreateResponse.

Si en lugar de devolver el HttpResponseMessage desea devolver un objeto CLR personalizado, deberá lanzar una HTTPResponseException para devolver un 404.


7
2017-08-31 16:22



Si desea crear un mensaje que describa su excepción, lo mejor es llamar. Request.CreateErrorResponse, y usar cualquiera de las muchas sobrecargas disponibles. Hay advertencias sobre cómo se formatea la respuesta dependiendo de si tiene CustomErrors configurado en ON en su web.config, o si está en el modo DEBUG. En realidad, también puede configurar este comportamiento mediante programación, utilizando la propiedad HttpConfiguration.IncludeErrorDetailPolicy. Vea aquí también: http://weblogs.asp.net/cibrax/archive/2013/03/01/asp-net-web-api-logging-and-troubleshooting.aspx

Puede leer este artículo para obtener una descripción detallada y algunas opciones que tiene para resolver el problema exacto que describe: Web API, HttpError y el comportamiento de las excepciones: "Se ha producido un error"


0
2018-05-31 22:59