C# 如何过滤短路请求管道?

C# 如何过滤短路请求管道?,c#,asp.net-core,asp.net-core-mvc,C#,Asp.net Core,Asp.net Core Mvc,我不熟悉ASP.NET核心MVC,只是一个关于如何过滤短路请求管道的问题。我知道设置过滤器的context.Result将绕过/短路请求管道。下面是我课本上的一个小屏幕: 假设在操作筛选器中有以下语句: public void OnActionExecuting(ActionExecutingContext context) { context.Result = new StatusCodeResult(StatusCodes.Status403Forbidden); } 我的问题是:

我不熟悉ASP.NET核心MVC,只是一个关于如何过滤短路请求管道的问题。我知道设置过滤器的context.Result将绕过/短路请求管道。下面是我课本上的一个小屏幕:

假设在操作筛选器中有以下语句:

public void OnActionExecuting(ActionExecutingContext context)
{
   context.Result = new StatusCodeResult(StatusCodes.Status403Forbidden);
}
我的问题是:

Q1这意味着动作方法将不会被调用,但它实际上是如何发生的,必须有一个sth检查
context.Result
以确定是否应该调用动作方法。这是什么东西

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


Q3-如果结果筛选器不适用,如何调用IActionResult执行?

这清楚地表明设置
结果
会使操作和管道短路,使其他操作筛选器无法运行:

将操作筛选器内的结果设置为非空值将使操作和任何剩余操作筛选器短路

现在,只有在操作方法(或操作筛选器)生成结果时才会调用
IResultFilter
IAsyncResultFilter
,在您的示例中,这是真的。如果您的操作方法或操作筛选器出现异常,则不会调用它们。见: