过滤器类型

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

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

Filter 执行顺序

Net Filter之IAuthorizationFilter - 图1

IAuthorizationFilter

权限过滤器:它在Filter Pipleline中首先运行,并用于决定当前用户是否有请求权限。如果没有请求权限直接返回。

在请求到达的时候最先执行,优先级最高,主要作是提供用户请求权限过滤,对不满足权限的用户,可以在过滤器内执行拒绝操作,俗称:“管道短路”

属性

方法

OnAuthorization(AuthorizationFilterContext)) Called early in the filter pipeline to confirm request is authorized.

示例

  1. using Microsoft.AspNetCore.Mvc.Filters;
  2. namespace Net6.Filter.Demo.Filters;
  3. public class CustomerAuthorizationFilter : Attribute, IAuthorizationFilter
  4. {
  5. public void OnAuthorization(AuthorizationFilterContext context)
  6. {
  7. Console.WriteLine("OnAuthorization");
  8. }
  9. }

或者TypeFilter需要传入类型参数

  1. public sealed class AuthorizeAdminAttribute : TypeFilterAttribute
  2. {
  3. public AuthorizeAdminAttribute(bool ignore = false) : base(typeof(AuthorizeAdminFilter))
  4. {
  5. IgnoreFilter = ignore;
  6. Arguments = new object[] { ignore };
  7. }
  8. /// <summary>
  9. /// 获取一个值指示是否忽略过滤器动作的执行
  10. /// </summary>
  11. public bool IgnoreFilter { get; }
  12. private class AuthorizeAdminFilter : IAsyncAuthorizationFilter
  13. {
  14. private readonly bool _ignoreFilter;
  15. private readonly ILogger<AuthorizeAdminFilter> _logger;
  16. public AuthorizeAdminFilter(bool ignoreFilter, ILogger<AuthorizeAdminFilter> logger)
  17. {
  18. _logger = logger;
  19. _ignoreFilter = ignoreFilter;
  20. }
  21. public async Task OnAuthorizationAsync(AuthorizationFilterContext context)
  22. {
  23. await Task.CompletedTask;
  24. }
  25. }
  26. }

Arguments是设置自定义注入的对象 key 以Filter结尾,列如:ignoreFilter

  1. [AuthorizeAdmin]
  2. public IActionResult Index()
  3. {
  4. return View();
  5. }

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该操作关联的操作的最有效策略 (最具体的) 。