无法使用[FromQuery] ASP Net Core 2 API绑定params

时间:2018-05-23 09:46:55

标签: c# asp.net-core asp.net-core-2.0 asp.net-core-webapi asp.net-core-routing

我是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,但其他参数都是空的。

我的代码中是否遗漏了某些内容或错误?

1 个答案:

答案 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) {
        //....
    }
}

参考Model Binding in ASP.NET Core