ASP.NET Web API v2 并使用 ELMAH 记录所有错误/异常

标签 asp.net asp.net-web-api elmah elmah.mvc

尽管花了几个小时在网上搜索,我还是找不到这个问题的解决方案。作为 Web API v2 的菜鸟,这对于有更多经验的人来说可能是一个非常简单的问题。

我有一个干净的 MVC 项目更新为使用 Web API v2。我已经通过 Nuget 安装了许多 ELMAH 软件包。

当我在 MVC 中使用普通的 Home Controller 时,如果我放置了一个无效的页面,例如/Home/test 它会生成一个 404。Elmah 反过来捕获这个,我只从日志中知道哪些页面可能被破坏等。

我想将这种级别的登录转移到 API Controller 。日志记录确实有效,但我必须向 Controller 抛出异常才能在 Elmah 中记录一些内容。

我猜想像 404/415 错误这样的东西被归类为“已处理”异常,但我只记录了未处理的异常。

无论如何,我想要的是记录 API Controller 上的任何错误。通过这种方式,我可以监控 API 的使用方式以及调用客户端导致的任何错误。对于不支持的数据类型,错误可能是 404s、415,等等。这样,如果来自客户端的发布数据有任何问题,我可以很容易地看到本应传回的响应。

提前致谢!

WebApi.config:

Public static void Register(HttpConfiguration config)
{
    ...
       config.filters.add(new Elmah.Contrib.WebApi.ElmahHandleErrorApiAttribute());
}

过滤器配置:
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
   filters.Add(new Elmah.Contrib.Mvc.ElmahHandleErrorAttribute());
   filters.Add(new HandleErrorAttribute();
}

最佳答案

事实证明,404 错误在 Web API 中的处理方式略有不同,它们绕过通常的请求管道,并在 ELMAH 了解它们之前直接发送到浏览器。

因此,为了使用 ELMAH 记录 404 错误,您需要在 WebApiConfig 中添加一个“全部捕获”路由作为最后一个路由以手动记录错误。

我刚刚更新了帖子并包含了一个工作示例解决方案 - http://jasonwatmore.com/post/2014/05/03/Getting-ELMAH-to-catch-ALL-unhandled-exceptions-in-Web-API-21.aspx

关于ASP.NET Web API v2 并使用 ELMAH 记录所有错误/异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30375170/

相关文章:

iphone - 从 Web 服务 4.0 返回 JSON

asp.net-mvc - asp.net mvc : What makes error. cshtml 运行(并且在此过程中未登录到 elmah)

c# - Elmah 日志错误页面自定义

javascript - AngularJS $http 使用参数中的对象访问 ASP.NET Web Api

asp.net-web-api - Web API - 将双参数传递给 GET 方法

c# - 将 ELMAH 日志 ID 传递到 ASP.NET 中的自定义错误页面时出现问题

.net - 如何在 WIX 安装项目中添加 ASP.NET web 项目作为引用?

c# - 在 JS 方法中获取变量的内容 asp.net C#

javascript - 在 asp.net 中使用 updatePanel 后,DropDownList 丢失其属性

asp.net-web-api - 如何检查 ASP.Net Web API 中的请求内容类型?