.NET Core过滤器(Filter)

  干了多年开发越来越觉得,异常处理和定位的能力反映出开发者硬核能力。对每一次线bug排查的复盘和总结,能让你功力倍增。
在日常开发中,除了考虑代码的严谨性,还要重视日志的记录。

过滤器

  通过使用ASP.NET Core 中的筛选器,可在请求处理管道中的特定阶段之前或之后运行代码。

  内置过滤器处理任务,例如:

  • 授权(防止用户访问未获授权的资源)。
  • 响应缓存(对请求管道进行短路出路,以便返回缓存的响应)。

  可以创建自定义过滤器,用于处理横切关注点。 横切关注点的示例包括错误处理、缓存、配置、授权和日志记录。 过滤器可以避免复制代码。 例如,错误处理异常过滤器可以合并错误处理。

过滤器的工作原理

  过滤器在 ASP.NET Core 操作调用管道(有时称过滤器管道)内运行。 过滤器管道在 ASP.NET Core 选择了要执行的操作之后运行。

使用场景

过滤器类型

  熟悉.NET MVC框架的同学应该知道,MVC也提供了5大过滤器供我们用来处理请求前后需要执行的代码。分别是授权过滤器(AuthenticationFilter),资源过滤器(resource-filters),操作过滤器(ActionFilter),异常过滤器(ExceptionFilter),结果过滤器(ResultFilter)。

  每种过滤选器类型都过滤器管道中的不同阶段执行:

  • 授权过滤器最先运行,用于确定是否已针对请求为用户授权。 如果请求未获授权,授权过滤器可以让管道短路。

  • 资源过滤器

    • 授权后运行。
    • OnResourceExecuting 在过滤器管道的其余阶段之前运行代码。 例如,OnResourceExecuting 在模型绑定之前运行代码。
    • OnResourceExecuted 在管道的其余阶段完成之后运行代码。
  • 操作过滤器

    • 在调用操作方法之前和之后立即运行代码。
    • 可以更改传递到操作中的参数。
    • 可以更改从操作返回的结果。
    • 不可在 Razor Pages 中使用。
  • 异常过滤器在向响应正文写入任何内容之前,对未经处理的异常应用全局策略。
    结果过滤器在执行操作结果之前和之后立即运行代码。 仅当操作方法成功执行时,它们才会运行。 对于必须围绕视图或格式化程序的执行的逻辑,它们很有用。

  下图展示过滤器类型在筛选器管道中的交互方式。
使用场景

过滤器使用

  在.net core 中,一般是在StartUp.cs的ConfigureServices方法中注册

// 将异常过滤器注入到容器中
services.AddScoped<GlobalExceptionFilter>();
版权声明: 本文为智客工坊「楠木大叔」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

results matching ""

    No results matching ""