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

4
尽管我在网上搜了好几个小时,但我仍然找不到解决这个问题的方法。作为对Web API v2的新手,对于经验更丰富的人来说,这可能是一个非常简单的问题。
我有一个干净的MVC项目,更新后使用了Web API v2。我已经通过Nuget安装了许多ELMAH包。
在处理MVC中的普通Home控制器时,如果我放置一个无效的页面(例如/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();
}

请遵循 http://stackoverflow.com/help/how-to-ask 的建议,能否更新您的帖子并附上有问题的代码呢? - Milan Baran
嗨,米兰,我已经更新了两个配置文件中我使用的代码。请查收。 - Sulphy
只是更新一下,我已经找到了我需要的东西,尽管不是来自 Elmah。回想起来,现在我可能正在做正确的事情,通过使用 Web API 自带的内置跟踪框架。我只是打算让 elmah 捕捉未处理的异常。对于其他人寻找相同解决方案的人,请查看此文章http://www.asp.net/web-api/overview/testing-and-debugging/tracing-in-aspnet-web-api。 - Sulphy
2个回答

3
原来在Web API中,404错误的处理方式有些不同,它们会绕过常规的请求流程并直接发送给浏览器,在ELMAH知道这些错误之前就已经发生了。因此,为了记录ELMAH中的404错误,您需要在WebApiConfig中添加一个“捕获所有”路由作为最后一个路由来手动记录这些错误。我刚刚更新了帖子,并包括了一个可行的示例解决方案-http://jasonwatmore.com/post/2014/05/03/Getting-ELMAH-to-catch-ALL-unhandled-exceptions-in-Web-API-21.aspx

0

嗨,Thomas,谢谢你的回复。我尝试添加了你提供的那个帖子中的那行代码,但不幸的是它似乎没有任何影响,所以我不知道我错在哪里 :o/ - Sulphy
如果您保留该内容但删除处理错误属性,会发生什么? - ThomasArdal
唉,当时尝试了一下,但没有成功:o( - Sulphy
由于此项目干净整洁,你能把它放在GitHub上吗? - ThomasArdal

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