素材巴巴 > 程序开发 >

Asp.net Core Filter执行顺序

程序开发 2023-09-18 10:46:26

1.过滤器类型

ASP.NET Core 有以下五种类型的过滤器,每个过滤器类型在过滤器管道中的不同阶段执行:

1.Authorization Filter
 授权过滤器 在过滤器管道中第一个执行,通常用于验证当前请求的合法性,不合法后面的管道会直接跳过。它们只有一个Before方法,不像其它大多数过滤器支持前置阶段方法和后置阶段方法。注意,您不要在授权过滤器中抛出异常,因为没有任何代码来处理异常(异常过滤器不处理它们)。2.Resource Filter
 资源过滤器是第二个运行,在 Authorization Filter 之后,Model Binding 之前执行。在性能方面,资源过滤器在实现缓存或截断过滤器管道尤为重要。3.Action Filter
 使用率最高的过滤器,在调用 Acioin 方法之前和之后执行代码。跟 Resource Filter 很类似,但 Model Binding 在之后执行。4.Exception Filter
 用于为应用程序执行异常处理策略。5.Result Filter
 当 Action 执行完成后,最后会执行过滤器。用于处理ActionResult结果输出策略。
 

在这里插入图片描述

2.默认执行顺序

当管道的某个阶段存在多个过滤器时,过滤器执行的默认顺序由作用域确定:全局过滤器优先于控制器过滤器,控制器过滤器优先于Action方法过滤器。

以下示例是同步 Action 过滤器调用的顺序:过滤器作用域		过滤器方法
 1	Global			OnActionExecuting
 2	Controller		OnActionExecuting
 3	Method			OnActionExecuting
 4	Method			OnActionExecuted
 5	Controller		OnActionExecuted
 6	Global			OnActionExecuted
 

提示
每个控制器的基类Controller包含OnActionExecuting和OnActionExecuted方法。其中OnActionExecuting在所有过滤器之前调用,OnActionExecuted在所有过滤器之后调用。

3.覆盖默认执行顺序

您可以通过实现IOrderedFilter接口来覆盖默认的执行顺序。此接口公开了Order属性表示优先级,以确定执行顺序;具有较低Order值的过滤器将在具有较高Order值的过滤器之前执行前置方法;具有较低Order值的过滤器将在具有较高Order值的过滤器之后执行后置方法。

您可以使用构造函数参数设置Order属性:
 [MyFilter(Name = "Controller Level Attribute", Order=1)]
 
 	过滤器作用域		Order	过滤器方法
 1	Method			1		OnActionExecuting
 2	Controller		2		OnActionExecuting
 3	Global			3		OnActionExecuting
 4	Global			3		OnActionExecuted
 5	Controller		2		OnActionExecuted
 6	Method			1		OnActionExecuted
 

过滤器执行时,Order属性的优先级高于作用域。过滤器首先按Order属性排序,然后再按作用域排序。所有内置过滤器实现IOrderedFilter接口并将Order值默认设置为0;因此,除非设置Order属性为非零值,否则按作用域的优先级执行。

在这里插入图片描述


标签:

素材巴巴 Copyright © 2013-2021 http://www.sucaibaba.com/. Some Rights Reserved. 备案号:备案中。