过滤器类型

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

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

Filter 执行顺序

Net Filter之ExceptionFilterAttribute - 图1

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,

  1. using Microsoft.AspNetCore.Mvc.Filters;
  2. namespace Net6.Filter.Demo.Filters;
  3. public class CustomerExceptionFilter : Attribute, IExceptionFilter
  4. {
  5. public void OnException(ExceptionContext context)
  6. {
  7. Console.ForegroundColor = ConsoleColor.Red;
  8. Console.WriteLine("发生了异常:{0}", context.Exception.Message);
  9. Console.ForegroundColor = ConsoleColor.Gray;
  10. }
  11. }

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