为什么我的WebApi GlobalExceptionHandler会运行?

时间:2016-03-17 21:48:07

标签: c# asp.net-web-api exception-handling

我按照此网址中的说明操作: https://ruhul.wordpress.com/2014/09/05/how-to-handle-exceptions-globally-in-asp-net-webapi-2/

My Exception Handler看起来像这样:

public class GlobalExceptionHandler : ExceptionHandler {
    public override bool ShouldHandle(ExceptionHandlerContext context)
    {
        return true;
    }

    public override Task HandleAsync(ExceptionHandlerContext context, CancellationToken cancellationToken)
    {
        return base.HandleAsync(context, cancellationToken);
    }


    public override void Handle(ExceptionHandlerContext context)
    {
        base.Handle(context);
    }
}

虽然我的注册如下:

config.Services.Replace(typeof(IExceptionHandler), new GlobalExceptionHandler());

然后我试图找到一条不存在的路由,但调试器不会破坏异常处理程序中的任何代码。相反,我直接进入404错误页面,内容类型为text / html,默认为ASP.NET错误页面。

我是否遗漏了这应该如何运作?我不能为我的生活弄清楚为什么我的异常处理程序不会被解雇。我的理解是IExceptionHandler应该有机会对所有异常采取行动,甚至是那些不会出现在控制器管道中的异常。

编辑:

我验证了控制器操作中抛出的异常由我的全局处理程序处理。

我在global.asax.cs的Application_Error中运行了一些代码,表明在路由错误(404)情况下确实发生了异常。在下面的代码中,httpError是对HttpException的有效引用

 protected void Application_Error(object sender, EventArgs e)
 {
     var error = Server.GetLastError();
     var httpError = error as HttpException;
     ....
 }

0 个答案:

没有答案