2012-08-31 15 views
5

Quiero tratar excepciones en un método de acción WebAPI, captándolas configurando el código de estado y escribiendo un mensaje para la respuesta. Normalmente en un MVC normales Controller Me gustaría hacer esto como tal, utilizando Controller 's Response propiedad:Uso de HttpContext.Current en ASP.NET WebAPI

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

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

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

¿O hay una manera específica de escribir a la respuesta de un controlador WebAPI?

Respuesta

7

Se supone que el método de acción crea el objeto de respuesta. O solo haz un nuevo HttpResponseMessage o llama a esto. Crea una respuesta.

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

+0

aplausos para que me van a ver en ella – jcvandan

+1

@ dormisher Solo para agregar, trate de no usar HttpContext ya que le impedirá usar cualquier otro host que no sea IIS. –

+0

hey man - todavía tengo problemas con esto, cuando lanzo una HttpResponseException, la respuesta es simplemente un vacío 200 - ¿Alguna idea de por qué es esto? Vi otra respuesta SO que decía establecer esta configuración val: - pero no cambia – jcvandan

0

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

Usted puede leer este artículo para obtener una profundidad en escribir, y algunas de las opciones que tiene que resolver el problema exacto que usted describe: Web API, HttpError and the behavior of Exceptions – ‘An error has occurred’

Cuestiones relacionadas