ASP Core 2.1模型活页夹和未通过传递的绑定

时间:2018-08-24 05:22:01

标签: c# asp.net

我看过其他几篇文章,并尝试实现他们的解决方案,但它们似乎不起作用:/

我有3个参数的动作:

public async Task<something> Post([FromBody]dynamic param1, [FromQuery]int[] param2, [FromQuery]string param3)
public async Task<something> Post([FromBody]dynamic param1, [FromQuery]List<int> param2, [FromQuery]string param3)

http请求:http://localhost:8080/api/someResource?param1=testValue&param2=0&param2=1&param2=2&param2=34

body(json):{“ test”:123}

  

Param1和param3如预期的那样绑定,但是param2总是   null(如果是集合)或int [0](如果是数组)。

     

ModelState表示没有错误。但是,如果我手动检查   上下文:HttpContext.Request.Query [“ param2”] [0],   HttpContext.Request.Query [“ param2”] [1],依此类推。   办法。另一则帖子提到他们只是发送了逗号分隔   收集并拆分它们,但我更喜欢使用模型活页夹   如果可能的话。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

有两种解决方法:

  1. 如下更改您的操作代码:

    [HttpPost]
    public async Task<something> Post([FromBody]dynamic param1, [FromQuery(Name ="param2")]int[] param2, [FromQuery]string param3) {
        // ////
    }
    

然后您可以按照上述方式发送请求。

  1. 通过为param2中的每个元素附加索引[]发送QueryString:

POST /yourpath/?param1=testValue&param2[0]=0&param2[1]=1&param2[2]=2&param2[3]=34 HTTP/1.1 
Content-Type : application/json

{"test":123}

两者都应按预期工作。