当我使用 TypedResults.NotFound 时,为什么 Visual Studio 告诉我用 HttpContext 替换参数?

问题描述 投票:0回答:1

所以,我得到了这个最小的 api 端点:

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

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

        return TypedResults.Ok(person);
    }
);

我必须做(IResult),因为CS1678'参数'1'被声明为'string'类型,但应该是'Microsoft.AspNetCore.Http.HttpContext'' - 我不明白为什么'name是这种情况' 参数。

asp.net-core httpcontext minimal-apis
1个回答
0
投票

文档提到了

TypedResults.Ok
TypedResults.NotFound
被声明为返回不同的类型,编译器不会尝试推断最佳匹配类型。

要使用

TypedResults
,必须完全声明返回类型,异步时需要 Task<> 包装器。使用 TypedResults 更加冗长,但这是让类型信息静态可用并因此能够对 OpenAPI 进行自我描述的权衡。

调整代码的可能方法可能如下所示

app.MapGet("/person/{name}", Task<Results<NotFound<string>, Ok<Person>>> (string name) =>
{
    var person = people.FirstOrDefault(p => p.Name.StartsWith(name));

    return person is null
        ? Task.FromResult(TypedResults.NotFound("Not found."))
        : Task.FromResult(TypedResults.Ok(person));
});
© www.soinside.com 2019 - 2024. All rights reserved.