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

时间:2013-07-03 13:31:18

标签: c# error-handling asp.net-web-api

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

以下是我的要求:

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

我该如何设置呢?

2 个答案:

答案 0 :(得分:7)

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

Install-Package Microsoft.AspNet.WebApi

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

以下是一个例子:

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-error

答案 1 :(得分:0)

您应该注意几个选项:

活动 AppDomain.CurrentDomain.FirstChanceException

无论是否处理,都会触发每个例外。在特定处理程序之前使用它来记录等。

活动 AppDomain.CurrentDomain.UnhandledException

将针对代码

中未处理的每个异常触发

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