我注册了这样的过滤器:
options.Filters.Add(typeof(MyExceptionFilter));
options.Filters.Add(typeof(MyResultFilter));
然后在ExceptionFilter中我实现了OnException()
:
public class MyExceptionFilter: IExceptionFilter
...
public void OnException(ExceptionContext context)
{
context.Result = CreateActionResult(context.Exception, context.ModelState);
context.ExceptionHandled = true;
}
抛出异常时OnException()
按预期执行,但后来我希望调用ResultFilter,但不是。
如何在IExceptionFilter之后使用另一个过滤器?有可能吗?
答案 0 :(得分:2)
Filters Documentation说以下内容:
结果过滤器可以在执行单个操作结果之前和之后立即运行代码。当action方法执行时,它们只运行 成功强>
当你遇到异常时,你不能说动作已经执行了 成功,因为管道进一步执行已停止。
答案 1 :(得分:0)
context.ExceptionHandled = true;
ExceptionContext.ExceptionHandled
将停止异常的传播。将其设置为false
,以允许例外继续。
请确保将其设置为最后一个true
(即MyResultFilter
)但是...这通常会产生错误的代码异味,但它并非“错误”# 34。