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

如何向ASP.NET Core中间件构造函数传递RequestDelegate?

如何在app.UseMiddleware<Capital>()中传递RequestDelegate

1. 框架自动注入(常规非终端中间件用法)

ASP.NET Core的中间件管道会自动帮你传递下一个中间件的RequestDelegate,不需要手动操作。当你调用app.UseMiddleware<Capital>()时,框架会自动匹配带RequestDelegate参数的构造函数,把后续管道的委托赋值给Capital类的next字段。这时候你的中间件就是非终端的,会在自身逻辑处理完成后(比如没有匹配到/capital/{country}路径时)调用next(context),把请求传递给下一个中间件。

你的现有代码里,app.UseMiddleware<Capital>()之后还有app.Run(...),框架就会把这个Run里的委托作为RequestDelegate传入Capital的构造函数,所以当请求不匹配capital路径时,会走到最后的终端中间件输出Terminal Middleware Reached。

2. 手动传递自定义RequestDelegate

如果需要手动指定next委托(比如不想用框架自动注入的后续管道),可以利用UseMiddleware的参数重载,直接传入构造函数需要的RequestDelegate:

app.UseMiddleware<Capital>(async context =>
{
    // 这里是你自定义的下一个中间件逻辑
    await context.Response.WriteAsync("自定义的后续中间件逻辑");
});

调用这个重载时,框架会直接使用你传入的委托作为Capital构造函数的参数,赋值给next字段。

3. 让中间件成为终端(不传递RequestDelegate)

如果想让Capital成为终端中间件(不调用后续管道),可以手动创建无参数的Capital实例,用app.Use添加到管道:

app.Use(async (context, next) =>
{
    var terminalCapital = new Capital();
    await terminalCapital.Invoke(context);
    // 因为terminalCapital的next是null,所以不会调用后续的next(context)
});

这种情况下,Capital的next字段为null,处理完自身逻辑后不会继续传递请求,直接终止管道。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 13:25:50