如何捕获ASP.NET Web Api中发生的 所有 未处理的异常,以便我可以记录它们?
到目前为止,我已经尝试过:
ExceptionHandlingAttribute
Application_Error
Global.asax.cs
AppDomain.CurrentDomain.UnhandledException
TaskScheduler.UnobservedTaskException
在ExceptionHandlingAttribute成功处理时引发的控制器操作方法和操作筛选范围内,但其他异常没有被处理,例如例外:
IQueryable
HttpConfiguration.MessageHandlers
基本上,如果异常将导致向客户端返回500 Internal Server Error,我希望它被记录下来。实施Application_Error在Web窗体和MVC中做得很好-我可以在Web Api中使用什么?
现在可以使用WebAPI 2.1(请参阅“ 新增功能”):
创建一个或多个IExceptionLogger实现。例如:
public class TraceExceptionLogger : ExceptionLogger { public override void Log(ExceptionLoggerContext context) { Trace.TraceError(context.ExceptionContext.Exception.ToString()); } }
然后在配置回调中向应用程序的HttpConfiguration注册,如下所示:
config.Services.Add(typeof(IExceptionLogger), new TraceExceptionLogger());
或直接:
GlobalConfiguration.Configuration.Services.Add(typeof(IExceptionLogger), new TraceExceptionLogger());