miércoles, octubre 30, 2013

Manejar excepciones en ASP.Net Web API (Handling Exceptions in ASP.NET Web API)

Cuando en una aplicación ASP.Net Web API se produce una excepción en una función interna (por ejemplo busco un cliente que no existe y no tengo controlada esta situación), si no se captura la excepción se enviará un error HTTP 500 (Internal Server Error) con el mensaje genérico

<Error><Message>An error has occurred.</Message></Error>

Si queremos enviar un mensaje que aporte más información al cliente podemos crear una clase derivada de
ExceptionFilterAttribute, tal como esta

  1. public class MyExceptionFilter:ExceptionFilterAttribute
  2. {
  3. public override void OnException(HttpActionExecutedContext context)
  4. {
  5. HttpResponseMessage msg = new HttpResponseMessage(HttpStatusCode.InternalServerError)
  6. {
  7. Content = new StringContent("Se ha producido un error en la app."),
  8. ReasonPhrase = "Se ha producido un error en la app."
  9. };  
  10. context.Response = msg;
  11. }
  12. }

Para usarla de forma global (que todos los controllers la usen) podemos añadir la siguiente línea al Application_Start() de Global.asax:

GlobalConfiguration.Configuration.Filters.Add(new WebAPIExceptionsDemo.MyExceptionFilter());

O bien, para usarla para determinados controllers, añadir a estos el atributo creado:

  1. [MyExceptionFilter]
  2. public class CustomerController
  3. {
  4. ...

Esta entrada es un extracto del artículo http://www.codeguru.com/csharp/.net/net_asp/handling-exceptions-in-asp.net-web-api.htm.

No hay comentarios:

Publicar un comentario