过滤器类型

net core 有五种过滤器,每个过滤器类型在过滤器管道中的不同阶段执行:

1:AuthorizationFilterAttribute 授权过滤器
2:ResourceFilterAttribute 资源过滤器
3:ExceptionFilterAttribute 异常过滤器
4:ActionFilterAttribute方法过滤器
5:ResultFilterAttribute 结果过滤器

Filter 执行顺序

Net Filter之ResultFilterAttribute - 图1

ResultFilterAttribute

异步环绕操作结果执行的抽象筛选器。 子类必须重写,OnResultExecuted(ResultExecutedContext))或者OnResultExecutionAsync(ResultExecutingContext, ResultExecutionDelegate))

属性

Order 获取用于确定筛选器执行顺序的顺序值。
筛选器以属性的 Order 升序数值执行。

方法

OnResultExecuted(ResultExecutedContext)) 在操作结果执行之后调用。
OnResultExecuting(ResultExecutingContext)) 在操作结果执行之前调用。
OnResultExecutionAsync(ResultExecutingContext, ResultExecutionDelegate)) 在操作结果之前异步调用。

示例

  1. using Microsoft.AspNetCore.Mvc.Filters;
  2. namespace Net6.Filter.Demo.Filters;
  3. public class CustomerResultFilter : ResultFilterAttribute
  4. {
  5. public override void OnResultExecuted(Microsoft.AspNetCore.Mvc.Filters.ResultExecutedContext context) {
  6. Console.WriteLine("OnResultExecuted");
  7. }
  8. public override void OnResultExecuting(Microsoft.AspNetCore.Mvc.Filters.ResultExecutingContext context) {
  9. Console.WriteLine("OnResultExecuting");
  10. }
  11. }

ActionExecutedContext

操作筛选器的上下文,特别是 OnActionExecuted(ActionExecutedContext)) 调用。

属性

ActionDescriptor 获取或设置 ActionDescriptor 所选操作。
Canceled 获取或设置操作筛选器对操作和操作筛选器管道进行短路的指示。
Controller 获取包含操作的控制器实例。
Exception 获取或设置 Exception 在执行操作或操作筛选器时捕获的捕获(如果有)。
ExceptionDispatchInfo 获取或设置捕获的 Exception 、如果捕获了此信息,则获取或设置ExceptionDispatchInfoException该信息。
ExceptionHandled 获取或设置已处理的指示 Exception
Filters 获取所有适用的 IFilterMetadata 实现。
HttpContext 获取或设置 HttpContext 当前请求。
ModelState 获取 ModelStateDictionary
Result 获取或设置 IActionResult
RouteData 获取或设置 RouteData 当前请求。

方法

FindEffectivePolicy() 返回应用于与FilterContext该操作关联的操作类型TMetadata的最有效 (最具体的) 策略。
IsEffectivePolicy(TMetadata)) 返回一个值,该值指示所提供的 IFilterMetadata 策略是否是应用于与 FilterContext该操作关联的操作的最有效策略 (最具体的) 。

ActionExecutingContext

操作筛选器的上下文

属性

ActionArguments 获取调用操作时要传递的参数。 键是参数名称。
ActionDescriptor 获取或设置 ActionDescriptor 所选操作。
Controller 获取包含操作的控制器实例。
Filters 获取所有适用的 IFilterMetadata 实现。
HttpContext 获取或设置 HttpContext 当前请求。
ModelState 获取 ModelStateDictionary
Result 获取或设置 IActionResult 要执行的。 设置为 Result 操作筛选器中的非null 值会使操作和剩余的任何操作筛选器短路。
RouteData 获取或设置 RouteData 当前请求。

方法

FindEffectivePolicy() 返回应用于与FilterContext该操作关联的操作类型TMetadata的最有效 (最具体的) 策略。
IsEffectivePolicy(TMetadata)) 返回一个值,该值指示所提供的 IFilterMetadata 策略是否是应用于与 FilterContext该操作关联的操作的最有效策略 (最具体的) 。

ResultExecutedContext

Properties

ActionDescriptor 获取或设置所选操作的 ActionDescriptor。
Canceled 获取或设置操作筛选器对操作和操作筛选器管道进行短路的指示。
Controller 获取或设置操作筛选器对操作和操作筛选器管道进行短路的指示。
Exception 获取或设置 Exception 在执行操作或操作筛选器时捕获的捕获(如果有)。
ExceptionDispatchInfo 获取或设置捕获的 Exception 、如果捕获了此信息,则获取或设置ExceptionDispatchInfoException该信息。
ExceptionHandled 获取或设置已处理的指示 Exception
Filters 获取所有适用的 IFilterMetadata 实现。
HttpContext 获取或设置 HttpContext 当前请求。
ModelState 获取 ModelStateDictionary
Result 获取或设置 IActionResult 要执行的。 设置为 Result 操作筛选器中的非null 值会使操作和剩余的任何操作筛选器短路。
RouteData 获取或设置 RouteData 当前请求。

Methods

FindEffectivePolicy() 返回应用于与FilterContext该操作关联的操作类型TMetadata的最有效 (最具体的) 策略。
IsEffectivePolicy(TMetadata)) 返回一个值,该值指示所提供的 IFilterMetadata 策略是否是应用于与 FilterContext该操作关联的操作的最有效策略 (最具体的) 。

ResultExecutingContext

Properties

ActionDescriptor 获取或设置所选操作的 ActionDescriptor。
Cancel 获取或设置操作筛选器对操作和操作筛选器管道进行短路的指示。
Controller 获取或设置操作筛选器对操作和操作筛选器管道进行短路的指示。
Filters 获取所有适用的 IFilterMetadata 实现。
HttpContext 获取或设置 HttpContext 当前请求。
ModelState 获取 ModelStateDictionary
Result 获取或设置 IActionResult 要执行的。 设置为 Result 操作筛选器中的非null 值会使操作和剩余的任何操作筛选器短路。
RouteData 获取或设置 RouteData 当前请求。

Methods

FindEffectivePolicy() 返回应用于与FilterContext该操作关联的操作类型TMetadata的最有效 (最具体的) 策略。
IsEffectivePolicy(TMetadata)) 返回一个值,该值指示所提供的 IFilterMetadata 策略是否是应用于与 FilterContext该操作关联的操作的最有效策略 (最具体的) 。