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

从.NET 5迁移到.NET 6后builder.Use调用歧义问题如何解决?

解决.NET 6中Map路由里Use方法的调用歧义问题

问题原因

.NET 6对UseExtensions类新增了一个重载方法:Use(IApplicationBuilder, Func<HttpContext, RequestDelegate, Task>),而原代码中的异步lambda未明确指定next参数的类型,编译器无法区分它应该匹配Func<HttpContext, Func<Task>, Task>还是新增的重载,因此抛出调用歧义错误。

解决方案

方案一:显式指定next参数类型

直接给lambda中的next参数标注RequestDelegate类型,让编译器明确匹配目标重载:

app.Map("/status", builder =>
{
        builder.Use(async (context, RequestDelegate next) =>
        {
           Log.Debug(context.GetRequestLogString());
           context.Response.StatusCode = StatusCodes.Status200OK;
           await context.Response.WriteAsync("OK");
        });
});

方案二:改用Run方法(推荐)

由于你的代码中并未调用next(),属于终端中间件(不会将请求传递到后续管道),使用Run方法更符合语义,同时彻底避开重载歧义问题:

app.Map("/status", builder =>
{
        builder.Run(async context =>
        {
           Log.Debug(context.GetRequestLogString());
           context.Response.StatusCode = StatusCodes.Status200OK;
           await context.Response.WriteAsync("OK");
        });
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 08:20:25