Purtroppo il link fornito nel COMMET di Eric Leschinski mostra solo come implementare l'interfaccia System.Web.Mvc.IExceptionFilter, e non l'interfaccia System.Web.Http.Filters.IExceptionFilter. Il primo è utilizzato nei normali controller MVC, mentre il secondo è il ApiCotrollers.
Ecco un semplice esempio di classe mi si avvicinò con per accedere eccezioni non gestite gettati nei miei 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;
}
E tutto quello che dovete fare per abilitare questo filtro è registrarsi nel vostro metodo 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);
}
Spero che questo aiuti altri googlers là fuori!
fonte
2013-10-20 17:27:25
Questo ragazzo ha una buona procedura dettagliata su come fare un gestore di eccezioni globale nel MVC: http://www.prideparrot.com/blog/archive/2012/5/exception_handling_in_asp_net_mvc –