【发布时间】:2014-11-12 12:40:51
【问题描述】:
我正在尝试替换我们当前代码中的错误模式,其中每个控制器操作由一行组成,例如:
HandleExceptions(() => { actual.code.for.action; more.code; yada; yada; yada;});
我为我们的 ApiControllers 构建了一个 ExceptionFilterAttribute。这是你非常标准的 ExceptionFilterAttribute,据我从我看过的文档中可以看出:
public class HandleExceptionsAttribute : ExceptionFilterAttribute
{
public override void OnException(HttpActionExecutedContext actionExecutedContext)
{
if (actionExecutedContext.Exception is SecurityException) { ... }
else if (actionExecutedContext.Exception is InvalidOperationException) { ... }
else { base.OnException(actionExecutedContext); }
}
}
我确实在全局范围内注册了该属性,但现在真的不想在全局范围内注册它:
GlobalConfiguration.Configuration.Filters.Add(new HandleExceptionsAttribute());
出于测试目的,我将其设置为:
[Route("~/throwAnException")]
[HttpGet]
[HandleExceptionsAttribute]
public blarg[] ThrowSomething() {
throw new SecurityException("you are not allowed here");
}
我的 HandleExceptionsAttribute.OnException() 永远不会被调用。为什么?
【问题讨论】:
标签: asp.net-web-api exception-handling