不幸的埃裏克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);
}
我希望這可以幫助其他谷歌的那裏!
這傢伙就如何使在MVC一個全球性的異常處理程序相當不錯演練:http://www.prideparrot.com/blog/archive/2012/5/exception_handling_in_asp_net_mvc –