我是ASP.NET Core MVC的新手,只是一个关于如何过滤短路请求管道的问题。我知道设置过滤器的context.Result将绕过/短路请求管道。以下是我的课本中的碎石镜头:
假设我在操作过滤器中有以下语句:
public void OnActionExecuting(ActionExecutingContext context)
{
context.Result = new StatusCodeResult(StatusCodes.Status403Forbidden);
}
我的问题是:
Q1-这意味着不会调用该操作方法,但是实际上它是如何发生的,一定要检查context.Result
以确定是否应调用该操作方法。那这是什么东西?
问题2:请求被短路后,结果过滤器是否仍然适用?
问题3-如果不应用结果过滤器,则如何调用IActionResult执行?
答案 0 :(得分:1)
这清楚地表明,设置Result
会使操作和管道短路,从而使其他操作过滤器无法运行:
在操作过滤器内将结果设置为非null值将使操作和所有剩余的操作过滤器短路。
现在,仅当操作方法(或操作过滤器)产生结果(在您的情况下为真)时才调用IResultFilter
或IAsyncResultFilter
。如果您的操作方法或操作过滤器冒出了异常,则不会调用它们。参见: