Ответ 1
К сожалению, ссылка, содержащаяся в Eric Leschinski commet, показывает только, как реализовать интерфейс System.Web.Mvc.IExceptionFilter, а не System.Web.Http.Filters.IExceptionFilter. Первый используется в обычных MVC-контроллерах, а второй - ApiCotrollers.
Вот простой пример класса, который я придумал для регистрации необработанных исключений, брошенных в мои ApiControllers:
public class ExceptionLoggerFilter: IExceptionFilter
{
public ExceptionLoggerFilter(Logger logger)
{
this.logger = logger;
}
public bool AllowMultiple { get { return true; } }
public Task ExecuteExceptionFilterAsync(
HttpActionExecutedContext actionExecutedContext,
CancellationToken cancellationToken)
{
return Task.Factory.StartNew(() =>
{
logger.Error("web service error", actionExecutedContext.Exception);
}, cancellationToken);
}
private Logger logger;
}
И все, что вам нужно сделать, чтобы включить этот фильтр, зарегистрировать его в вашем методе Global.asax Application_Start:
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
// allocate filter and add it to global configuration
var exceptionLogger = new ExceptionLoggerFilter(Container.Get<Logger>());
GlobalConfiguration.Configuration.Filters.Add(exceptionLogger);
WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
}
Я надеюсь, что это поможет другим гуглерам!