过滤器类型
net core 有五种过滤器,每个过滤器类型在过滤器管道中的不同阶段执行:
1:IAuthorizationFilterAttribute 授权过滤器
2:IResourceFilterAttribute 资源过滤器
3:ExceptionFilterAttribute 异常过滤器
4:ActionFilterAttribute方法过滤器
5:ResultFilterAttribute 结果过滤器
Filter 执行顺序
IAuthorizationFilter
权限过滤器:它在Filter Pipleline中首先运行,并用于决定当前用户是否有请求权限。如果没有请求权限直接返回。
在请求到达的时候最先执行,优先级最高,主要作是提供用户请求权限过滤,对不满足权限的用户,可以在过滤器内执行拒绝操作,俗称:“管道短路”
属性
方法
| OnAuthorization(AuthorizationFilterContext)) | Called early in the filter pipeline to confirm request is authorized. |
|---|---|
示例
using Microsoft.AspNetCore.Mvc.Filters;namespace Net6.Filter.Demo.Filters;public class CustomerAuthorizationFilter : Attribute, IAuthorizationFilter{public void OnAuthorization(AuthorizationFilterContext context){Console.WriteLine("OnAuthorization");}}
或者TypeFilter需要传入类型参数
public sealed class AuthorizeAdminAttribute : TypeFilterAttribute{public AuthorizeAdminAttribute(bool ignore = false) : base(typeof(AuthorizeAdminFilter)){IgnoreFilter = ignore;Arguments = new object[] { ignore };}/// <summary>/// 获取一个值指示是否忽略过滤器动作的执行/// </summary>public bool IgnoreFilter { get; }private class AuthorizeAdminFilter : IAsyncAuthorizationFilter{private readonly bool _ignoreFilter;private readonly ILogger<AuthorizeAdminFilter> _logger;public AuthorizeAdminFilter(bool ignoreFilter, ILogger<AuthorizeAdminFilter> logger){_logger = logger;_ignoreFilter = ignoreFilter;}public async Task OnAuthorizationAsync(AuthorizationFilterContext context){await Task.CompletedTask;}}}
Arguments是设置自定义注入的对象 key 以Filter结尾,列如:ignoreFilter
[AuthorizeAdmin]public IActionResult Index(){return View();}
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 |
返回一个值,该值指示所提供的 IFilterMetadata 策略是否是应用于与 FilterContext该操作关联的操作的最有效策略 (最具体的) 。 |
ActionExecutingContext
属性
| ActionArguments | 获取调用操作时要传递的参数。 键是参数名称。 |
|---|---|
| ActionDescriptor | 获取或设置 ActionDescriptor 所选操作。 |
| Controller | 获取包含操作的控制器实例。 |
| Filters | 获取所有适用的 IFilterMetadata 实现。 |
| HttpContext | 获取或设置 HttpContext 当前请求。 |
| ModelState | 获取 ModelStateDictionary。 |
| Result | 获取或设置 IActionResult 要执行的。 设置为 Result 操作筛选器中的非null 值会使操作和剩余的任何操作筛选器短路。 |
| RouteData | 获取或设置 RouteData 当前请求。 |
方法
| FindEffectivePolicy |
返回应用于与FilterContext该操作关联的操作类型TMetadata的最有效 (最具体的) 策略。 |
|---|---|
| IsEffectivePolicy |
返回一个值,该值指示所提供的 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 |
返回一个值,该值指示所提供的 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 |
返回一个值,该值指示所提供的 IFilterMetadata 策略是否是应用于与 FilterContext该操作关联的操作的最有效策略 (最具体的) 。 |
