我按照此网址中的说明操作: 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;
....
}