catch all unhandled exceptions in ASP.NET Web Api
asp.net-web-api, c#, unhandled-exception
Solution
This is now possible with WebAPI 2.1 (see the What's New):
Create one or more implementations of IExceptionLogger. For example:
public class TraceExceptionLogger : ExceptionLogger
{
public override void Log(ExceptionLoggerContext context)
{
Trace.TraceError(context.ExceptionContext.Exception.ToString());
}
}
Then register with your application's HttpConfiguration, inside a config callback like so:
config.Services.Add(typeof(IExceptionLogger), new TraceExceptionLogger());
or directly:
GlobalConfiguration.Configuration.Services.Add(typeof(IExceptionLogger), new TraceExceptionLogger());
Problem
How do I catch all unhandled exceptions that occur in ASP.NET Web Api so that I can log them? So far I have tried: - Create and register an `ExceptionHandlingAttribute` - Implement an `Application_Error` method in `Global.asax.cs` - Subscribe to `AppDomain.CurrentDomain.UnhandledException` - Subscribe to `TaskScheduler.UnobservedTaskException` The `ExceptionHandlingAttribute` successfully handles exceptions that are thrown within controller action methods and action filters, but other exceptions are not handled, for example: - Exceptions thrown when an `IQueryable` returned by an action method fails to execute - Exceptions thrown by a message handler (i.e. `HttpConfiguration.MessageHandlers`) - Exceptions thrown when creating a controller instance Basically, if an exception is going to cause a 500 Internal Server Error to be returned to the client, I want it logged. Implementing `Application_Error` did this job well in Web Forms and MVC - what can I use in Web Api?