cattura tutte le eccezioni non gestite in ASP.NET Web Api

Come posso rilevare tutte le eccezioni non gestite che si verificano in ASP.NET Web Api in modo che possa registrarle?

Finora ho provato:

  • Crea e registra un ExceptionHandlingAttribute
  • Implementare un metodo Application_Error in Global.asax.cs
  • Iscriviti a AppDomain.CurrentDomain.UnhandledException
  • Iscriviti a TaskScheduler.UnobservedTaskException

ExceptionHandlingAttribute gestisce con successo le eccezioni generate nei metodi di azione del controller e nei filtri di azione, ma non vengono gestite altre eccezioni, ad esempio:

  • Eccezioni generate quando un IQueryable restituito da un metodo di azione non riesce a essere eseguito
  • Eccezioni lanciate da un gestore di messaggi (ad esempio HttpConfiguration.MessageHandlers )
  • Eccezioni generate durante la creazione di un’istanza del controllore

Fondamentalmente, se un’eccezione causerà un errore del server interno 500 da restituire al client, lo voglio loggato. L’implementazione di Application_Error ha funzionato bene in Web Forms e MVC: cosa posso utilizzare in Web Api?