一尘不染

捕获ASP.NET Web Api中所有未处理的异常

c#

如何捕获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中使用什么?


阅读 393

收藏
2020-05-19

共1个答案

一尘不染

现在可以使用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());
2020-05-19