我在.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
}
答案 0 :(得分:2)
它没有被捕获,因为web api捕获了它并将其转换为404响应。框架本身处理这种情况,而不是用户代码。