【问题标题】:Can't bind params using [FromQuery] ASP Net Core 2 API无法使用 [FromQuery] ASP Net Core 2 API 绑定参数
【发布时间】:2018-11-02 05:56:13
【问题描述】:

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

我是否遗漏了什么或我的代码有什么问题?

【问题讨论】:

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


    【解决方案1】:

    如果这些参数应该在 query 中,那么 route 模板中就不需要它们

    [HttpGet("{page}&{pageSize}&{predicate}", Name = "GetBuildingsBySearchCriteria")]
    

    "{page}&{pageSize}&{predicate}"route模板中的占位符,这也是[FromQuery]绑定参数失败的原因。

    [FromHeader][FromQuery][FromRoute][FromForm]:使用这些来指定要应用的确切绑定源

    强调我的

    基于显示的示例 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) {
            //....
        }
    }
    

    参考Model Binding in ASP.NET Core

    【讨论】:

      猜你喜欢
      • 2019-03-16
      • 1970-01-01
      • 2019-09-16
      • 1970-01-01
      • 1970-01-01
      • 2023-04-09
      • 2018-02-17
      • 2020-10-20
      • 1970-01-01
      相关资源
      最近更新 更多