残念ながら、Eric Leschinskiのコメットで提供されているリンクは、System.Web.Http.Filters.IExceptionFilterインターフェイスではなく、System.Web.Mvc.IExceptionFilterインターフェイスを実装する方法のみを示しています。1つ目は通常のMVCコントローラーで使用され、2つ目は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.asaxApplication_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);
}
これが他のグーグルに役立つことを願っています!