Minimal API中的FromQuery问题
我正在学习Adam Seebeck的书《ASP.NET Core APIs》。在第5 章,我试图让这个Minimal API端点工作,但遇到了编译错误:
public static IEndpointRouteBuilder MapProductEndpoints(this IEndpointRouteBuilder app)
{
var path = app.MapGroup("/api").WithTags("Products");
path.MapGet("/products", async([FromQuery] ProductSearchParameters parameters, IProductService service, CancellationToken cancellationToken
) =>
{
var products = await service.SearchAsync(parameters, cancellationToken);
return Results.Ok(products);
});
return app;
}
这是我的 ProductSearchParameters 记录
public record ProductSearchParameters
(
string? SearchItem,
int Page = 1,
int PageSize = 20
);
错误信息是:
Parameter 'parameters' of type ProductSearchParameters should define a bool TryParse(string, IFormatProvider, out ProductSearchParameters) method, or implement IParsable
它不喜欢的部分是对 [FromQuery] 的使用。
据我所知,这本书没有勘误,我也很肯定这次没有搞砸。
请给出建议?
解决方案
你没有搞砸,这属于 ASP.NET 的Minimal API的预期行为,特别是这一行:
[FromQuery] ProductSearchParameters parameters
对 [FromQuery] 的使用期望 ProductSearchParameters 是一个单一的查询参数,本质上是一个标量,因此会尝试对其进行解析。
解决办法是:
- 完全移除
[FromQuery],让它自动绑定。我建议你这么做。 - 使用
[AsParameters]代替[FromQuery],这会让ASP.NET展开该记录。
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。