捕获ASP.NET Web Api中所有未处理的异常
如何捕获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());
以上是 捕获ASP.NET Web Api中所有未处理的异常 的全部内容, 来源链接: utcz.com/qa/405069.html