c# - 无法使用 [FromQuery] ASP Net Core 2 API 绑定(bind)参数

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

我是 ASP Net Core 2 的新手,我想将来自 URL 查询字符串的不同参数绑定(bind)到我的操作中的操作参数:

[HttpGet("{page}&{pageSize}&{predicate}", Name = "GetBuildingsBySearchCriteria")]
public IActionResult GetBuildingsBySearchCriteria([FromHeader] string idUser, [FromQuery]int page, [FromQuery]int pageSize, [FromQuery]string predicate)
{
    ....
}

当我使用 postman 测试我的操作时,我在 header 中设置了 idUser 并在 URL 中设置了其他参数,例如:

http://localhost:51232/api/buildings/page=1&pageSize=10&predicate=fr

结果是我收到了从 header 发送的 idUser,但其他参数为空。

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

最佳答案

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

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

"{page}&{pageSize}&{predicate}"route 模板中的占位符,这就是为什么 [FromQuery] 绑定(bind)参数失败。

[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 使用它们,例如

[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

关于c# - 无法使用 [FromQuery] ASP Net Core 2 API 绑定(bind)参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50485052/

相关文章:

c# - 在 ASP.NET Core MVC 中获取当前登录用户的角色

c# - 如何在.net core中使用 "System.Net.ServicePointManager"?

c# - 通用容器 : why do I need an interface?

c# - DateTime.UtcNow 在不同的服务器中给出不同的值

c# - 对两个List<>的操作

c# - 如何在 asp.net 中将参数添加到操作过滤器?

C# dotnet core 2 将数据从中间件/过滤器传递到 Controller 方法

c# - 如何使用 asp.net core 2 测试具有属性的方法?

mysql - .NET Core 2.0 与 MySQL : Specified key was too long; max key length is 3072 bytes

c# - 如何使用 Core(SQL) API 从 Azure Cosmos Db 检索数据