写点什么

中间件 vs 过滤器

  • 2025-01-13
    福建
  • 本文字数:1695 字

    阅读完需:约 6 分钟

在 ASP.NET Core 中,中间件(Middleware) 和 过滤器(Filters) 是两种不同的机制,用于处理请求和响应的管道。它们的作用和适用场景有所不同,以下是它们的对比和详细说明:


中间件(Middleware)


定义


中间件是 ASP.NET Core 请求处理管道中的组件,用于处理 HTTP 请求和响应。每个中间件可以对请求进行处理,并决定是否将请求传递给下一个中间件。


特点


  1. 全局性:中间件作用于整个应用程序的请求管道,适用于所有请求。

  2. 顺序性:中间件的执行顺序由 UseMiddleware 或 Use 方法的调用顺序决定。

  3. 灵活性:可以处理请求和响应,甚至可以终止请求管道(不调用下一个中间件)。

  4. 低级别:中间件更接近底层,可以直接操作 HttpContext


适用场景


  • 全局的请求处理逻辑(如身份验证、日志记录、异常处理)。

  • 修改请求或响应的内容(如添加自定义头、压缩响应)。

  • 终止请求管道(如未授权的请求直接返回 401)。


示例


public class CustomMiddleware{    private readonly RequestDelegate _next;
    public CustomMiddleware(RequestDelegate next)    {        _next = next;    }
    public async Task InvokeAsync(HttpContext context)    {        // 处理请求        context.Response.Headers.Add("X-Custom-Header", "Middleware");
        // 调用下一个中间件        await _next(context);    }}
// 注册中间件app.UseMiddleware<CustomMiddleware>();
复制代码


过滤器(Filters)


定义


过滤器是 ASP.NET Core MVC 或 Minimal API 中的一种机制,用于在特定的 MVC 操作(Action)或控制器(Controller)前后执行逻辑。过滤器是 MVC 框架的一部分,而不是请求管道的一部分。


特点


  1. 局部性:过滤器可以应用于特定的控制器或操作,而不是全局的。

  2. 细粒度控制:可以在操作执行前、执行后或执行过程中插入逻辑。

  3. MVC 集成:过滤器与 MVC 框架紧密集成,可以访问 MVC 特定的上下文(如 ActionExecutingContext)。

  4. 高级别:过滤器更关注 MVC 操作的行为,而不是底层的 HTTP 请求。


适用场景


  • 控制器或操作级别的逻辑(如授权、模型验证、日志记录)。

  • 修改操作的结果(如格式化响应、处理异常)。

  • 在操作执行前后执行特定逻辑。


过滤器类型


  1. Authorization Filters:用于授权(如 [Authorize])。

  2. Resource Filters:在操作执行前后执行逻辑(如缓存)。

  3. Action Filters:在操作执行前后执行逻辑(如日志记录)。

  4. Exception Filters:处理操作中的异常。

  5. Result Filters:在操作结果执行前后执行逻辑(如格式化响应)。


示例


public class CustomActionFilter : IActionFilter{    public void OnActionExecuting(ActionExecutingContext context)    {        // 在操作执行前执行        context.HttpContext.Response.Headers.Add("X-Custom-Header", "ActionFilter");    }
    public void OnActionExecuted(ActionExecutedContext context)    {        // 在操作执行后执行    }}
// 注册过滤器[ServiceFilter(typeof(CustomActionFilter))]public class HomeController : Controller{    public IActionResult Index()    {        return View();    }}
复制代码


中间件 vs 过滤器的对比



如何选择?


1、使用中间件


  • 当你需要处理全局的请求逻辑时。

  • 当你需要直接操作 HttpContext 时。

  • 当你需要在 MVC 框架之外处理请求时。


2、使用过滤器


  • 当你需要处理特定控制器或操作的逻辑时。

  • 当你需要与 MVC 框架紧密集成时(如授权、模型验证)。

  • 当你需要在操作执行前后执行特定逻辑时。


结合使用


在实际项目中,中间件和过滤器可以结合使用。例如:


  • 使用中间件处理全局的日志记录和异常处理。

  • 使用过滤器处理控制器或操作级别的授权和模型验证。


通过合理使用中间件和过滤器,可以构建一个高效、灵活且易于维护的 ASP.NET Core 应用程序。


文章转载自:代码拾光

原文链接:https://www.cnblogs.com/liyongqiang-cc/p/18631327

体验地址:http://www.jnpfsoft.com/?from=001YH

用户头像

还未添加个人签名 2023-06-19 加入

还未添加个人简介

评论

发布
暂无评论
中间件 vs 过滤器_中间件_快乐非自愿限量之名_InfoQ写作社区