Minimal API中的FromQuery问题

后端开发 2026-07-10

我正在学习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 是一个单一的查询参数,本质上是一个标量,因此会尝试对其进行解析。

解决办法是:

  1. 完全移除 [FromQuery],让它自动绑定。我建议你这么做。
  2. 使用 [AsParameters] 代替 [FromQuery],这会让ASP.NET展开该记录。
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章