过滤器类型
net core 有五种过滤器,每个过滤器类型在过滤器管道中的不同阶段执行:
1:IAuthorizationFilterAttribute 授权过滤器
2:IResourceFilterAttribute 资源过滤器
3:ExceptionFilterAttribute 异常过滤器
4:ActionFilterAttribute方法过滤器
5:ResultFilterAttribute 结果过滤器
Filter 执行顺序
ExceptionFilterAttribute
在操作引发异常后异步运行的抽象筛选器。子类必须重写OnException(ExceptionContext)) or OnExceptionAsync(ExceptionContext)) ,但不能同时覆盖两者。
在服务器向客户端写入响应内容之前,如果系统引发了异常,异常过滤器可以驳货该异常,该过滤器作用于全局范围,也是最常用的过滤器
Properties
| Order | Gets the order value for determining the order of execution of filters. Filters execute in ascending numeric value of the Order property. |
|---|---|
Methods
| OnException(ExceptionContext)) | Called after an action has thrown an Exception. |
|---|---|
| OnExceptionAsync(ExceptionContext)) | Called after an action has thrown an Exception. |
示例
先定义一个CustomerExceptionFilter的Action Filter,
using Microsoft.AspNetCore.Mvc.Filters;namespace Net6.Filter.Demo.Filters;public class CustomerExceptionFilter : Attribute, IExceptionFilter{public void OnException(ExceptionContext context){Console.ForegroundColor = ConsoleColor.Red;Console.WriteLine("发生了异常:{0}", context.Exception.Message);Console.ForegroundColor = ConsoleColor.Gray;}}
再到需要使用CustomerExceptionFilter的方法头部添加上属性标记
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该操作关联的操作的最有效策略 (最具体的) 。 |
