所以,我得到了这个最小的 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是这种情况' 参数。
文档提到了
和TypedResults.Ok
被声明为返回不同的类型,编译器不会尝试推断最佳匹配类型。TypedResults.NotFound
要使用
,必须完全声明返回类型,异步时需要 Task<> 包装器。使用 TypedResults 更加冗长,但这是让类型信息静态可用并因此能够对 OpenAPI 进行自我描述的权衡。TypedResults
调整代码的可能方法可能如下所示
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));
});