过滤器类型
net core 有五种过滤器,每个过滤器类型在过滤器管道中的不同阶段执行:
1:IAuthorizationFilterAttribute 授权过滤器
2:IResourceFilterAttribute 资源过滤器
3:ExceptionFilterAttribute 异常过滤器
4:ActionFilterAttribute方法过滤器
5:ResultFilterAttribute 结果过滤器
Filter 执行顺序
IResourceFilter
资源过滤器: 它在Authorzation后面运行,同时在后面的其它过滤器完成后还会执行。Resource filters 实现缓存或其它性能原因返回。因为它运行在模型绑定前,所以这里的操作都会影响模型绑定。官方文档
资源过滤器实现自接口IResourceFilter或者 IAsyncResourceFilter
属性
方法
Methods
| OnResourceExecuted(ResourceExecutedContext)) | 执行资源过滤器。在执行管道的其余部分后调用。 |
|---|---|
| OnResourceExecuting(ResourceExecutingContext)) | 执行资源筛选器。 在执行管道的其余部分之前调用。 |
示例
先定义一个CustomerResourceFilter的ResourceFilter,
using Microsoft.AspNetCore.Mvc.Filters;namespace Net6.Filter.Demo.Filters;public class CustomerResourceFilter : Attribute,IResourceFilter{/// <summary>/// 执行资源过滤器。在执行管道的其余部分后调用。/// </summary>/// <param name="context"></param>public void OnResourceExecuted(ResourceExecutedContext context){Console.WriteLine("OnResourceExecuted");}/// <summary>/// 执行资源筛选器。 在执行管道的其余部分之前调用。/// </summary>/// <param name="context"></param>public void OnResourceExecuting(ResourceExecutingContext context){Console.WriteLine("OnResourceExecuting");}}
再到需要使用CustomerResourceFilter的方法头部添加上属性标记
[HttpGet(Name = "GetWeatherForecast")]//[WeatherForecastActionFilter(Order =1)][CustomerResourceFilter]public IEnumerable<WeatherForecast> Get(){Console.WriteLine("GetWeatherForecast开始");return Enumerable.Range(1, 5).Select(index => new WeatherForecast{Date = DateTime.Now.AddDays(index),TemperatureC = Random.Shared.Next(-20, 55),Summary = Summaries[Random.Shared.Next(Summaries.Length)]}).ToArray();}
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该操作关联的操作的最有效策略 (最具体的) 。 |
