4

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

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

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

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

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

无论如何,我想要的是记录 API 控制器上的任何错误。通过这种方式,我可以监控 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();
}
4

2 回答 2

3

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

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

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

于 2015-11-06T00:25:47.250 回答
0

您还需要使用 Web API 注册异常记录器。看看这篇很棒的帖子:http ://www.jasonwatmore.com/post/2014/05/03/Getting-ELMAH-to-catch-ALL-unhandled-exceptions-in-Web-API-21.aspx

于 2015-05-22T15:54:53.103 回答