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

使用TypedResults.NotFound时,VS提示用HttpContext替换参数的原因

问题原因与解决办法

错误根源

这个CS1678错误本质是编译器类型推断失败导致的重载匹配错误。

你用TypedResults.NotFound和TypedResults.Ok返回的是不同的具体实现类(比如NotFoundHttpResult、OkObjectResult),编译器没法自动推断出lambda的返回类型是IResult。这时候它会去匹配MapGet的其他重载,其中有一个重载的委托签名是Func<HttpContext, IResult>——也就是只接受HttpContext作为唯一参数。编译器误把你的string name参数当成了这个重载的参数,所以抛出“参数应为HttpContext”的错误。

解决办法

不需要加强制转换,直接显式指定lambda的返回类型为IResult,让编译器明确知道返回类型,就不会乱匹配重载了:

app.MapGet("/person/{name}", (string name) => IResult
{
    var person = people.FirstOrDefault(p => p.Name.StartsWith(name));

    if (person == null)
        return TypedResults.NotFound("Not found.");

    return TypedResults.Ok(person);
});

或者也可以统一返回值的类型,把两个返回语句都显式转为IResult,但显式指定返回类型的写法更清晰优雅。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 18:14:53