正在忽略ApiController的ExceptionFilterAttribute

时间:2014-11-11 19:41:04

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

我试图替换当前代码中的错误模式,其中每个控制器操作由一行组成,例如:

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");
        }

永远不会调用My HandleExceptionsAttribute.OnException()。为什么呢?

1 个答案:

答案 0 :(得分:0)

1-确保您在管道中的任何地方都没有处理异常的任何捕获并吞下它们。

2-如果您全局添加过滤器,则不需要通过HandleExceptionsAttribute修饰您的操作,因此请将其删除并让您的代码生成异常并查看会发生什么,查看您的代码,我相信所有设置都正确它应该工作。