【问题标题】:Handle all exceptions globally in ASP.Net Web Api (global.asax)在 ASP.Net Web Api (global.asax) 中全局处理所有异常
【发布时间】:2019-02-05 22:57:31
【问题描述】:

我目前在global.asax 中使用Application_Error 来处理Web API 异常,将它们传递给错误记录器并记录它们。

    void Application_Error(object sender, EventArgs e)
    {
        if (Server.GetLastError() != null)
        {
            exceptionController.Log(Server.GetLastError());
            Server.ClearError();
        }
    }

它会捕获一些异常,但不是全部 - 例如来自服务器的 404 错误等。我如何自己捕获更多异常(我假设这意味着覆盖 ASP.Net 的默认异常处理)。有没有办法从global.asax 完成这一切,或者还有更多方法吗?我想避免在我的所有控制器上使用 try catch finally 块。

Mods - 有一百万个线程与此相关,但也有一百万个来自许多不同时期的同样独特的答案。我很困惑,以至于我不得不在 2018 年再次询问。

【问题讨论】:

  • 看看我在这里给出的答案stackoverflow.com/questions/38025305/…
  • 您的某些错误并非来自应用程序,例如找不到地址。如果您可以控制它,您必须在客户端处理它。对于大多数问题,最后检查 HttpWebResponse
  • @Nkosi 感谢您的回答。但是您链接的“ASP.NET Web API 2 中的全局错误处理”文章 - 我相信 - 已经过时了。而且您发布的方式很精简,但仍然需要我在所有控制器上添加属性。有没有办法在 2018 年甚至不必向我的控制器添加任何逻辑 - 只需有一个全局异常类来覆盖默认异常处理并针对任何类型的异常传递异常消息、发送电子邮件等?我真的在为此苦苦挣扎 - 有很多方法可以解决它,而微软似乎并没有很好地记录它 IMO

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


【解决方案1】:

如果您想处理框架中的 404,您可以添加一个路由来处理“其他所有内容”并返回自定义响应。

我们在路由表的末尾有一条包罗万象的路由,看起来有点像

        config.Routes.MapHttpRoute(
            name: "NotImplemented",
            routeTemplate: "{*data}",
            defaults: new { controller = "Error", action = "notimplemented", data = UrlParameter.Optional });

我们生成自定义响应的地方。您也许可以在路由表中执行类似的操作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-12
    • 1970-01-01
    • 2012-05-20
    • 2020-11-08
    • 2014-11-10
    • 2013-04-08
    • 2012-09-17
    • 1970-01-01
    相关资源
    最近更新 更多