无法使用 [FromQuery] ASP Net Core 2 API 绑定参数
Can't bind params using [FromQuery] ASP Net Core 2 API
我是 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)
{
....
}
当我使用邮递员测试我的动作时,我在header中设置了idUser
,在URL中设置了其他参数,示例:
http://localhost:51232/api/buildings/page=1&pageSize=10&predicate=fr
结果是我收到了 header 发送的 idUser
但其他参数为空。
我是否遗漏了什么或者我的代码有什么问题?
如果这些参数是在 query 中,那么在 route template[=21= 中就不需要它们了]
在
[HttpGet("{page}&{pageSize}&{predicate}", Name = "GetBuildingsBySearchCriteria")]
"{page}&{pageSize}&{predicate}"
是route模板中的占位符,这也是[FromQuery]
无法绑定参数的原因。
[FromHeader]
, [FromQuery]
, [FromRoute]
, [FromForm]
: Use these to specify the exact binding source you want to apply.
强调我的
基于显示的示例 URL 并假设根路由,那么一个选项是使用
[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) {
//....
}
}
我是 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)
{
....
}
当我使用邮递员测试我的动作时,我在header中设置了idUser
,在URL中设置了其他参数,示例:
http://localhost:51232/api/buildings/page=1&pageSize=10&predicate=fr
结果是我收到了 header 发送的 idUser
但其他参数为空。
我是否遗漏了什么或者我的代码有什么问题?
如果这些参数是在 query 中,那么在 route template[=21= 中就不需要它们了]
在
[HttpGet("{page}&{pageSize}&{predicate}", Name = "GetBuildingsBySearchCriteria")]
"{page}&{pageSize}&{predicate}"
是route模板中的占位符,这也是[FromQuery]
无法绑定参数的原因。
[FromHeader]
,[FromQuery]
,[FromRoute]
,[FromForm]
: Use these to specify the exact binding source you want to apply.
强调我的
基于显示的示例 URL 并假设根路由,那么一个选项是使用
[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) {
//....
}
}