在IExceptionFilter之后调用IResultFilter

时间:2017-10-27 14:19:21

标签: c# asp.net-core

我注册了这样的过滤器:

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之后使用另一个过滤器?有可能吗?

2 个答案:

答案 0 :(得分:2)

Filters Documentation说以下内容:

  

结果过滤器可以在执行单个操作结果之前和之后立即运行代码。当action方法执行时,它们只运行   成功

当你遇到异常时,你不能说动作已经执行了 成功,因为管道进一步执行已停止。

答案 1 :(得分:0)

context.ExceptionHandled = true; 

ExceptionContext.ExceptionHandled将停止异常的传播。将其设置为false,以允许例外继续。

请确保将其设置为最后一个true(即MyResultFilter)但是...这通常会产生错误的代码异味,但它并非“错误”# 34。