筛选器是每个 .NET API 的组成部分。在这篇文章中,我旨在深入研究 .NET Core 中可访问的各种类型的筛选器。
向 ASP.NET API 发起请求时,您的请求在到达目标控制器之前会经过一系列中间件和过滤器。
近年来,从 ASP.NET MVC 到最小 API 的过渡仍在继续,请务必注意,最小 API 框架可能不支持某些筛选器。
但可以想象的是,MVC 管道中的其他筛选器将来可能会在最小 API 中使用。
筛选器是可以应用于控制器、操作或全局应用于整个应用程序的属性或类。它们提供了一种将预处理和后处理逻辑添加到控制器操作方法的方法的方法。
在 .NET Core 中,有许多内置筛选器,包括授权筛选器、操作筛选器、异常筛选器和资源筛选器。
需要了解的一个重要方面是过滤器的顺序。当您向控制器发送请求时,某些中间件可能会拦截您的请求并执行某些操作。中间件执行后,我们进入过滤器流水线区域。
执行顺序取决于过滤器类型;当您接近要调用的控制器时,每种类型都会变得更加具体。当然,您可以根据要执行的任务的粒度添加或覆盖任何类型的筛选器。
这里列出了所有过滤器类型,按执行顺序排序:
以下是管道过滤器流的表示:
授权筛选器
.NET 中的授权筛选器用于验证用户是否有权访问特定控制器。
它们是管道中触发的初始筛选器,通常在实现基于令牌的授权流时使用。
如果要修改 .NET 提供的此默认机制,可以重写默认授权筛选器并合并自定义逻辑。
在一篇文章中,我深入研究了自定义此机制的过程:
资源筛选器
资源筛选器在执行身份验证筛选器后立即执行其逻辑,并封装大多数其他筛选器。由于它们在模型绑定步骤之前运行,因此这些筛选器的一个有用应用是影响模型绑定。
这些筛选器的其他用途包括日志记录、缓存和限制管理。
资源筛选器是 ASP.NET Core MVC 管道的组成部分,截至目前,它与最小 API 不兼容。
操作过滤器
操作筛选器 操作筛选器用于在执行操作方法之前或之后执行某些特定任务。这些筛选器可以添加到不同的范围级别:全局、操作、控制器。
操作筛选器是 ASP.NET Core MVC 管道的一部分,不适用于(至少在撰写本文时)最小 API。对于最小 API 项目,应使用终结点筛选器。
终结点筛选器
终结点筛选器与操作筛选器在同一级别运行,并且仅通过最小 API 提供。它们封装了一组终结点。从经典 ASP.NET MVC 的角度来看,它们的功能类似于充当控制器过滤器的过滤器。
异常筛选器
异常过滤器用于管理请求处理过程中出现的异常。它们可以通过属性分配给控制器或操作方法。
关于异常筛选器的要点:
尽管如此,建议尽可能使用中间件进行异常处理。应将异常筛选器保留给错误处理因调用的特定操作方法而异的情况。
异常筛选器是 ASP.NET Core MVC 管道的组成部分,截至目前,它与最小 API 不兼容。使用最小 API 时,建议使用中间件来处理异常。
结果筛选器
结果筛选器是一种特殊类型的筛选器,在执行操作方法之后,但在处理结果并将其传输到客户端之前运行。从本质上讲,它们在执行操作结果之前和之后都起作用。
结果筛选器提供了在执行操作结果之前或执行结束后执行逻辑的机会,同时仍然在响应到达客户端之前拦截响应。
它们的实用程序涵盖各种方案,包括:
源代码获取:公众号回复消息【code:59416
】