ASP Net Core 2 API使用[FromQuery]无法绑定参数问题排查
问题分析与解决
嘿,我来帮你排查这个参数绑定失败的问题!核心是两处细节出错了:
1. 路由模板的写法混淆了路由参数与查询字符串
你在[HttpGet]特性里写的"{page}&{pageSize}&{predicate}",是在定义路由路径参数——也就是URL路径分段(比如/api/buildings/1/10/fr这种格式),但你实际要使用的是查询字符串参数(?page=1&pageSize=10这种格式)。
ASP.NET Core里,查询字符串参数不需要在路由模板里声明,只要在Action参数上标记[FromQuery],框架就会自动从URL的查询部分绑定这些参数。所以你需要把路由模板里的这些参数移除,只保留固定的路由路径(如果控制器已经有[Route("api/[controller]")]特性,那Action的[HttpGet]可以不用加额外路径)。
2. 测试URL缺少查询字符串的起始标记
你提供的测试URL是:
http://localhost:51232/api/buildings/page=1&pageSize=10&predicate=fr
这里的问题是没有加查询字符串的起始符?,导致page=1被当成了路径的一部分,而不是查询参数。正确的格式应该是:
http://localhost:51232/api/buildings?page=1&pageSize=10&predicate=fr
修正后的代码
把Action的路由特性调整为:
[HttpGet(Name = "GetBuildingsBySearchCriteria")] public IActionResult GetBuildingsBySearchCriteria( [FromHeader] string idUser, [FromQuery] int page, [FromQuery] int pageSize, [FromQuery] string predicate) { // 你的业务逻辑代码 }
这样修改后,用正确的URL测试,就能正常接收到page、pageSize和predicate这三个查询参数了,请求头里的idUser也能正常绑定。
内容的提问来源于stack exchange,提问作者Omar AMEZOUG
相关产品推荐
相关产品推荐

