• 作者:老汪软件技巧
  • 发表时间:2024-12-30 21:04
  • 浏览量:

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

中间件(Middleware)定义

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

特点全局性:中间件作用于整个应用程序的请求管道,适用于所有请求。顺序性:中间件的执行顺序由 UseMiddleware 或 Use 方法的调用顺序决定。灵活性:可以处理请求和响应,甚至可以终止请求管道(不调用下一个中间件)。低级别:中间件更接近底层,可以直接操作 HttpContext。适用场景示例

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();

过滤器(Filters)定义

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

特点局部性:过滤器可以应用于特定的控制器或操作,而不是全局的。细粒度控制:可以在操作执行前、执行后或执行过程中插入逻辑。MVC 集成:过滤器与 MVC 框架紧密集成,可以访问 MVC 特定的上下文(如 ActionExecutingContext)。高级别:过滤器更关注 MVC 操作的行为,而不是底层的 HTTP 请求。适用场景过滤器类型Authorization Filters:用于授权(如 [Authorize])。Resource Filters:在操作执行前后执行逻辑(如缓存)。Action Filters:在操作执行前后执行逻辑(如日志记录)。Exception Filters:处理操作中的异常。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 过滤器的对比特性中间件(Middleware)过滤器(Filters)

作用范围

全局(整个应用程序的请求管道)

局部(特定的控制器或操作)

执行顺序

在请求管道的早期执行

在 MVC 操作执行前后执行

适用场景

全局的请求处理逻辑(如日志、异常处理)

控制器或操作级别的逻辑(如授权、模型验证)

访问上下文


上一条查看详情 +Linux环境安装使用Nginx保姆级教学
下一条 查看详情 +没有了