.Net6 web API (ResouceFilter-ActionFilter)
前沿
net 中的 ResouceFilter 和 ActionFilter 有啥主要区别呢
其实2者都是过滤器
在ASP.NET Core中,Resource Filter和Action Filter是两种不同类型的过滤器,
用于在请求处理过程中执行额外的逻辑。它们可以用于对请求和响应进行处理、修改或拦截,
以实现诸如授权、日志记录、异常处理等功能。
Resource Filter(资源过滤器)
Resource Filter是在控制器实例化之前或操作方法执行之前执行的过滤器。它对整个请求的生命周期起作用,包括请求的开始和结束阶段。
Resource Filter通常用于处理全局性的逻辑,例如认证、授权、响应缓存等。它可以实现IResourceFilter
接口。
Resource Filter的优势包括:
- 可以全局性地应用到整个应用程序中,对请求的每个阶段都有效。
- 可以访问请求和响应,对它们进行修改或拦截。
Action Filter(操作过滤器)
Action Filter是在操作方法执行之前和之后执行的过滤器。它主要针对特定的控制器操作方法(Action)。Action Filter可以实现IActionFilter
接口。
Action Filter的优势包括:
- 更加精确地控制过滤器的作用范围,可以针对特定的控制器操作方法进行设置。
- 可以访问并修改操作方法的参数和结果,对其进行处理。
2者的场景和代码
Resource Filter的使用场景:
- 身份验证和授权:在请求处理之前,检查用户的身份信息,并根据权限决定是否允许访问资源。
- 响应缓存:在请求处理之后,根据缓存策略对响应进行缓存,提高性能。
public class MyResourceFilter : IResourceFilter { public void OnResourceExecuting(ResourceExecutingContext context) { // 在处理请求之前执行的逻辑 } public void OnResourceExecuted(ResourceExecutedContext context) { // 在处理请求之后执行的逻辑 } }
Action Filter的使用场景:
- 日志记录:在操作方法执行之前和之后,记录请求的相关信息,例如请求路径、参数、执行时间等。
- 异常处理:在操作方法执行期间,捕获并处理操作方法抛出的异常。
public class MyActionFilter : IActionFilter { public void OnActionExecuting(ActionExecutingContext context) { // 在操作方法执行之前执行的逻辑 } public void OnActionExecuted(ActionExecutedContext context) { // 在操作方法执行之后执行的逻辑 } }