我是ASP Net Core 2的新手,我希望将来自URL查询字符串的不同参数绑定到我的操作中的操作参数:
[HttpGet("{page}&{pageSize}&{predicate}", Name = "GetBuildingsBySearchCriteria")]
public IActionResult GetBuildingsBySearchCriteria([FromHeader] string idUser, [FromQuery]int page, [FromQuery]int pageSize, [FromQuery]string predicate)
{
....
}
当我使用邮递员测试我的操作时,我在标题中设置idUser
并在URL中设置其他参数,例如:
http://localhost:51232/api/buildings/page=1&pageSize=10&predicate=fr
结果是我收到了我从标题发送的idUser
,但其他参数都是空的。
我的代码中是否遗漏了某些内容或错误?
答案 0 :(得分:3)
如果这些参数属于查询,则路径模板中不需要它们
在
[HttpGet("{page}&{pageSize}&{predicate}", Name = "GetBuildingsBySearchCriteria")]
"{page}&{pageSize}&{predicate}"
是 route 模板中的占位符,这就是[FromQuery]
无法绑定参数的原因。
[FromHeader]
,[FromQuery]
,[FromRoute]
,[FromForm]
:使用这些指定要应用的确切绑定源。
强调我的
根据显示的示例网址并假定根路由,然后一个选项是使用
[Route("api/[controller]")]
public class BuildingsController: Controller {
//GET api/buildings?page=1&pageSize=10&predicate=fr
[HttpGet("", Name = "GetBuildingsBySearchCriteria")]
public IActionResult GetBuildingsBySearchCriteria(
[FromHeader]string idUser,
[FromQuery]int page,
[FromQuery]int pageSize,
[FromQuery]string predicate) {
//....
}
}
或者你可以在路线中使用它们,如
[Route("api/[controller]")]
public class BuildingsController: Controller {
//GET api/buildings/1/10/fr
[HttpGet("{page:int}/{pageSize:int}/{predicate}", Name = "GetBuildingsBySearchCriteria")]
public IActionResult GetBuildingsBySearchCriteria(
[FromHeader]string idUser,
[FromRoute]int page,
[FromRoute]int pageSize,
[FromRoute]string predicate) {
//....
}
}