Web API 2.2中的全局异常处理程序没有捕获异常

时间:2014-11-05 21:47:05

标签: exception-handling asp.net-web-api2

我在.Net 4.5中有一个WebForms网站项目,我已经添加了ASP.Net Web API 2.2 NuGet包。 正在成功调用Web API方法并返回预期值。

但是,在为Web API 2.2创建了一个全局异常处理程序类之后,并将控制器类名从ProductController更改为Product以强制执行以下错误,然后此错误未被全局异常处理程序捕获。

从ProductController的Web API类中删除控制器后缀时出现错误消息

{"Message":"No HTTP resource was found that matches the request URI 'http://localhost/mysite/Vendors/api/
 Product/SaveProductName'.","MessageDetail":"No type was found that matches the controller named 'Product'."}

我的问题:为什么全局异常处理程序没有捕获此错误,但是当成功找到Web API方法时捕获Web API方法中抛出的异常,即ProductController类名未更改为故意导致例外?

全局异常处理程序如下

public class GlobalExceptionLogger : ExceptionLogger
{
 public GlobalExceptionLogger()
  {

  }

public override void Log(ExceptionLoggerContext context)
 {
    if (context != null && context.Exception != null)
    { 
          MyLogging.Log( context.Exception );
    }
    base.Log(context);
 }
}

Web API控制器类(对于未被全局异常处理程序捕获的错误,我将类名更改为Product)

 public class ProductController: ApiController
{
    //Methods omitted to SAVE SPACE
}

1 个答案:

答案 0 :(得分:2)

它没有被捕获,因为web api捕获了它并将其转换为404响应。框架本身处理这种情况,而不是用户代码。