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

ASP.NET Web API v2并使用ELMAH记录所有错误/异常,asp.net,asp.net-web-api,elmah,elmah.mvc,Asp.net,Asp.net Web Api,Elmah,Elmah.mvc,尽管花了几个小时在网上搜索,我还是找不到解决这个问题的办法。对于经验丰富的人来说,这可能是一个非常简单的问题 我有一个干净的MVC项目更新为使用WebAPIv2。我已经通过Nuget安装了许多ELMAH软件包 在MVC中使用普通主控制器时,如果我放入一个无效页面,例如/Home/test,它将生成404。Elmah反过来捕捉到了这一点,我从日志中知道哪些页面可能会被破坏等等 我想将此级别的登录转移到API控制器。日志记录确实有效,但我必须向控制器抛出一个异常,以便在Elmah中记录一些内容 我猜

尽管花了几个小时在网上搜索,我还是找不到解决这个问题的办法。对于经验丰富的人来说,这可能是一个非常简单的问题

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

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

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

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

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

提前谢谢

WebApi.config:

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

public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
   filters.Add(new Elmah.Contrib.Mvc.ElmahHandleErrorAttribute());
   filters.Add(new HandleErrorAttribute();
}

您还需要使用Web API注册异常记录器。查看这篇很棒的帖子:

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

因此,为了使用ELMAH记录404错误,您需要在WebApiConfig中添加一个“全面覆盖”路由作为最后一个路由来手动记录错误


我刚刚更新了帖子,并提供了一个工作示例解决方案-

下面,你能用有问题的代码更新你的帖子吗?嗨,米兰,我已经更新了,以显示我在两个配置文件中使用的代码。只是更新一下,说我找到了我想要的东西,尽管不是来自Elmah。事后看来,通过使用WebAPI附带的内置跟踪框架,我现在可能正在做正确的事情。我要让elmah去处理未处理的异常。如果有人想做同样的事情,请查看这篇帖子嗨,托马斯,谢谢你的回复。我尝试从您提供的帖子中添加该行项目,不幸的是,它似乎没有任何影响,因此不确定我缺少了什么:o/如果保留该行项目,但删除handle error属性,会发生什么?唉,没有,当时尝试过,但没有乐趣:o(既然项目是干净的,您可以将其放在github上吗?