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

6
我正在构建一个.NET WebApi应用程序,并希望设置全局错误处理程序(即当异常从应用程序中的任何地方冒泡时执行的函数)。 这个链接 抱怨了对此的支持,但提供了几种解决方法。不幸的是,我似乎找不到有用的文档来支持它们中的任何一个。
以下是我的要求:
  • 捕获在操作方法中以及其他位置(例如控制器解析)中遇到的异常。
  • 在处理过程中访问原始Exception对象。
  • 在错误处理过程中访问容器中的服务(这是强烈想要的,但不是必须的)。
  • 不依赖于MVC(我正在使用纯WebApi)。高度希望不依赖于IIS。
我该如何设置这个呢?
2个回答

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。这里涉及的内容与IT技术有关,我会尽力使其更加通俗易懂。

这个能否用于MVC应用程序? - galdin
4
您应该发布完整的解决方案而不是链接到页面。仍需要调用以下代码:config.Services.Add(typeof(IExceptionLogger), new TraceSourceExceptionLogger(new TraceSource("MyTraceSource", SourceLevels.All))); - makhdumi

0

在Web服务器上运行时,UnhandlesExceptionHandler是否会真正起作用,还是抛出的异常会被底层服务器吞噬? - ChaseMedallion
从我的测试来看,未处理异常处理程序似乎从未运行...似乎底层服务器在某个地方捕获了异常。 - ChaseMedallion
我承认我没有在WebApi中尝试过。很抱歉这对你没用。你考虑过像ELMAH这样的东西吗?https://code.google.com/p/elmah/。它提供了非常广泛的异常日志记录。这里有一篇文章介绍如何集成http://www.tugberkugurlu.com/archive/asp-net-web-api-and-elmah-integration。 - user2509738
根据该帖子,似乎 Elmah for WebApi 使用 ErrorSignal.FromCurrentContext(),该方法使用 HttpContext.Current,这意味着(在我理解中)我需要依赖于 IIS。 - ChaseMedallion

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接