如何在WebApi中设置全局错误处理程序

本文关键字:全局 错误 处理 程序 设置 WebApi | 更新日期: 2023-09-27 18:20:48

我正在构建一个.NET WebApi应用程序,我想设置一个全局错误处理程序(基本上是一个在应用程序中任何地方出现异常时执行的函数)。此链接对支持此功能表示遗憾,但提供了几种解决方案。不幸的是,我似乎找不到任何有用的文档。

以下是我的要求:

  • 捕获在操作方法中以及在其他地方命中的异常(例如控制器解析)
  • 在处理过程中可以访问原始Exception对象
  • 在错误处理过程中,可以访问我(Autofac)IOC容器中的服务(这是一种强烈的需求,但不是必须的)
  • 不依赖MVC(我使用的是纯WebApi)。不依赖IIS是非常可取的

我该如何设置?

如何在WebApi中设置全局错误处理程序

如果您更新到Web API v2.1,可以通过Nuget使用以下命令:

Install-Package Microsoft.AspNet.WebApi

您可以通过从异常记录器继承来创建全局异常处理程序。

这里有一个例子:

class TraceExceptionLogger : ExceptionLogger
{
    public override void LogCore(ExceptionLoggerContext context)
    {
        Trace.TraceError(context.ExceptionContext.Exception.ToString());
    }
}

此处的发行说明中有更多详细信息:http://www.asp.net/web-api/overview/releases/whats-new-in-aspnet-web-api-21#global-错误

您应该注意以下几个选项:

事件AppDomain.CurrentDomain.FirstChanceException:

无论是否处理,都会对每个异常进行激发。在您的特定处理程序之前,将其用于日志等。

事件AppDomain.CurrentDomain.UnlandedException:

将对代码中未处理的每个异常进行激发

您需要在可以访问IOC容器等的服务中创建处理程序