You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自定义中间件类中用弃元接收RequestDelegate的原因及相关疑问

中间件构造函数使用弃元_的原因及影响

先看你给出的代码:

class ReaderMiddleware
{
    IReader reader;
 
    public ReaderMiddleware(RequestDelegate _, IReader reader) => this.reader = reader;
     
    public async Task InvokeAsync(HttpContext context)
    {
        await context.Response.WriteAsync($"Current Value: {reader.ReadValue()}");
    }
}

根据MSDN文档对弃元的说明:

... 不会被赋值,甚至可能不会被分配存储位置。

下面直接解答你的问题:

为什么用弃元接收必填的RequestDelegate?

ASP.NET Core的约定式中间件有个规则:如果中间件需要通过构造函数注入其他服务,RequestDelegate必须作为构造函数的第一个参数——这是框架的强制要求。但如果这个中间件的逻辑不需要把请求传递给后续中间件,就完全用不上这个RequestDelegate实例。

用弃元_的作用很明确:

  • 给编译器和其他开发者传递信号:这个参数是故意不使用的,不是代码疏忽
  • 享受弃元带来的优化,避免不必要的内存分配

是否意味着该中间件之后没有其他中间件?

没错,这个中间件会直接终止请求管道。因为它的InvokeAsync方法里没有调用await _next(context)(这里的_next就是构造函数接收的RequestDelegate)。ASP.NET Core的请求管道是链式执行的,只要某个中间件不调用后续委托,请求就不会继续往下传递,管道到这里就结束了。

总结:用弃元是为了符合中间件的构造函数约定,同时明确表示不需要后续中间件;而这个中间件的逻辑本身也确实没有继续传递请求,所以后续中间件不会被执行。

内容的提问来源于stack exchange,提问作者Anthony Voronkov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 11:10:01