我试图替换当前代码中的错误模式,其中每个控制器操作由一行组成,例如:
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()。为什么呢?
答案 0 :(得分:0)
1-确保您在管道中的任何地方都没有处理异常的任何捕获并吞下它们。
2-如果您全局添加过滤器,则不需要通过HandleExceptionsAttribute修饰您的操作,因此请将其删除并让您的代码生成异常并查看会发生什么,查看您的代码,我相信所有设置都正确它应该工作。