如何过滤短路请求管道?

时间:2019-08-05 04:46:50

标签: c# asp.net-core asp.net-core-mvc

我是ASP.NET Core MVC的新手,只是一个关于如何过滤短路请求管道的问题。我知道设置过滤器的context.Result将绕过/短路请求管道。以下是我的课本中的碎石镜头:

enter image description here

假设我在操作过滤器中有以下语句:

public void OnActionExecuting(ActionExecutingContext context)
{
   context.Result = new StatusCodeResult(StatusCodes.Status403Forbidden);
}

我的问题是:

Q1-这意味着不会调用该操作方法,但是实际上它是如何发生的,一定要检查context.Result以确定是否应调用该操作方法。那这是什么东西?

问题2:请求被短路后,结果过滤器是否仍然适用?

问题3-如果不应用结果过滤器,则如何调用IActionResult执行?

1 个答案:

答案 0 :(得分:1)

这清楚地表明,设置Result会使操作和管道短路,从而使其他操作过滤器无法运行:

  

在操作过滤器内将结果设置为非null值将使操作和所有剩余的操作过滤器短路。

现在,仅当操作方法(或操作过滤器)产生结果(在您的情况下为真)时才调用IResultFilterIAsyncResultFilter。如果您的操作方法或操作过滤器冒出了异常,则不会调用它们。参见:

相关问题