Niestety łącza w Commet Erica Leschinski pokazuje tylko, jak implementować interfejs System.Web.Mvc.IExceptionFilter, a nie interfejs System.Web.Http.Filters.IExceptionFilter. Pierwsza jest używana w zwykłych kontrolerach MVC, podczas gdy druga dotyczy ApiCotrollers.
Oto prosty przykład klasa wpadłem do logowania nieobsłużonych wyjątków zgłaszanych w moich 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;
}
i wszystko co musisz zrobić, aby włączyć ten filtr jest zarejestrować go w zamierzonej metodzie 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);
}
Mam nadzieję, że pomoże to innym użytkownikom google!
Ten facet ma dość dobrą instruktażu na temat sposobu dokonania całościowej obsługi wyjątku w MVC: http://www.prideparrot.com/blog/archive/2012/5/exception_handling_in_asp_net_mvc –