相关疑难解决方法(0)

如何为C#MVC4 WebAPI应用程序全局记录所有异常?

背景

我正在为客户开发API服务层,并且我被要求在全局范围内捕获并记录所有错误.

因此,虽然通过使用ELMAH或通过向以下内容添加类似内容,可以轻松处理类似未知端点(或操作)的内容Global.asax:

protected void Application_Error()
{
     Exception unhandledException = Server.GetLastError();
     //do more stuff
}
Run Code Online (Sandbox Code Playgroud)

...不会记录与路由无关的未处理错误.例如:

public class ReportController : ApiController
{
    public int test()
    {
        var foo = Convert.ToInt32("a");//Will throw error but isn't logged!!
        return foo;
    }
}
Run Code Online (Sandbox Code Playgroud)

我还尝试[HandleError]通过注册此过滤器来全局设置该属性:

filters.Add(new HandleErrorAttribute());
Run Code Online (Sandbox Code Playgroud)

但这也不会记录所有错误.

问题/疑问

如何拦截错误,例如通过调用/test上面生成的错误,以便我可以记录它们?似乎这个答案应该是显而易见的,但我已经尝试了迄今为止我能想到的一切.

理想情况下,我想在错误记录中添加一些内容,例如请求用户的IP地址,日期,时间等.我还希望能够在遇到错误时自动通过电子邮件发送支持人员.所有这些我都可以做到,只要我能在它们发生时拦截这些错误!

解决!

感谢Darin Dimitrov,我接受了他的回答,我弄清楚了. 的WebAPI并没有以同样的方式作为一个普通MVC控制器处理错误.

这是有效的:

1)在命名空间中添加自定义过滤器:

public class ExceptionHandlingAttribute : ExceptionFilterAttribute
{
    public override void OnException(HttpActionExecutedContext context)
    {
        if (context.Exception is BusinessException)
        {
            throw new HttpResponseException(new …
Run Code Online (Sandbox Code Playgroud)

c# error-handling asp.net-web-api

170
推荐指数
3
解决办法
8万
查看次数

标签 统计

asp.net-web-api ×1

c# ×1

error-handling ×1