If my Web API application is going to return an error to a client, I want to know about it.
I want to set up something like ELMAH to notify me when the problem occurs, and I want full details of the error, including exception stack trace, logged on the server.
In MVC, the Application_Error
event is how you achive this, but in Web Api this event often isn't triggered because exceptions are converted into
s higher in the call stack, and because some error conditions create a
directly without using an exception. One source of this is
, which catches all exceptions and turns them into error responses, discarding the exception information.
Here are some examples of exceptions that I am interested in handling:
- Exceptions thrown from action methods and action filters
- Exceptions thrown when creating a controller instance
- Exceptions due to routing errors, bad requests, authentication problems, and invalid OData queries
- Exceptions thrown when an IQueryable returned by an action method fails to execute
- Exceptions thrown by custom message handlers and formatters
When I started using Web API, I was surprised when my Application_Error
handler did not pick up an action method exception. I added a global
to take care of that, but then found several other categories of errors that could be returned to the client and still leave silence in the server logs.
In a production environment, relying on clients to report errors and having no error information available on the server will make diagnosing problems reactive and difficult.
Please provide a global error handling event for Web API, so that error details can be logged and notifications sent. The event should provide access to unhandled exceptions and non-success
s and HttpResponseMessage
s. In the case of
objects created from an exception, the exception details should be retained for the error handling event.