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

Cha*_*ion 6 c# error-handling asp.net-web-api

我正在构建一个.NET WebApi应用程序,我想设置一个全局错误处理程序(基本上是一个函数,当一个异常从应用程序的任何地方冒出来时执行).这个链接感叹对此的支持,但提供了几种解决方法.不幸的是,我似乎找不到任何有用的文档.

这是我的要求:

  • 捕获动作方法以及其他地方的异常(例如控制器分辨率).
  • 在处理期间可以访问原始的Exception对象.
  • 在错误处理过程中可以访问我的(Autofac)IOC容器中的服务(这是一个强烈的需求,但不是必须的).
  • 不依赖于MVC(我使用的是纯WebApi).不希望依赖IIS.

我该如何设置呢?

Dar*_*ton 7

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

Install-Package Microsoft.AspNet.WebApi
Run Code Online (Sandbox Code Playgroud)

您可以通过继承Exception Logger来创建全局异常处理程序.

这是一个例子:

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

更多详细信息,请参见发布说明:http://www.asp.net/web-api/overview/releases/whats-new-in-aspnet-web-api-21#global-error

  • 您应该发布完整的解决方案而不是链接到页面.这仍然需要调用:`config.Services.Add(typeof(IExceptionLogger),new TraceSourceExceptionLogger(new TraceSource("MyTraceSource",SourceLevels.All))); (3认同)

use*_*738 0

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

事件AppDomain.CurrentDomain.FirstChanceException

无论是否处理,都会触发每个异常。在您的特定处理程序之前使用它进行日志记录等。

事件AppDomain.CurrentDomain.UnhandledException

对于代码中未处理的每个异常都会触发

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