在HTTP POST中发送一个数组

本文关键字:一个 数组 HTTP POST | 更新日期: 2023-09-27 18:05:41

我想在请求正文中使用HTTP POST发送一个JSON字符串数组:

{
    {
      A: 0,
      B: 1
    },
    {
      A: 2,
      B: 3
    }
}

我有以下数据结构:

public class Test
    {        
        [Display(Name = "A")]
        [Range(1, 2147483647)]
        [Required]        
        public int A { get; set; }
        [Display(Name = "B")]
        [Range(0, 2147483647)]
        [Required]
        public int B { get; set; }
    }

这是我的动作:

        [HttpPost]
        [ResponseType(typeof(WriteResponse))]
        [Route("Account/{clientId:int}/Test")]
        public IHttpActionResult PostEventTest(int clientId, [FromBody]Test[] test){}

当我点击这个动作时,测试参数为空。如何通过请求体接收特定类型的数组?

在HTTP POST中发送一个数组

如果Test应该代表整个JSON,那么它是错误的。甚至整个JSON都是错误的,因为它不是一个数组。正确的JSON格式是:

{
    "list": [
      {
          "A": "0",
          "B": "1"
      },
      {
          "A": "2",
          "B": "3"
      }
    ]
}

或者像这样:

{
    "item1": {
      A: 0,
      B: 1
    },
    "Item2": {
      A: 2,
      B: 3
    }
}

为此,您的模型必须更改为。对于第一个示例,您的模型应该看起来像:

public class TestModel
{
    public IList<Test> list
    { get; set; }
}
public class Test
{        
        [Display(Name = "A")]
        [Range(1, 2147483647)]
        [Required]        
        public int A { get; set; }
        [Display(Name = "B")]
        [Range(0, 2147483647)]
        [Required]
        public int B { get; set; }
}

对于第二个例子,Test类是相同的,只有TestModel会改变:

public class TestModel
{
    public Test item1
    { get; set; }
    public Test item2
    { get; set; }
}

但是只有第一个例子是数组。要测试JSON是否正确,使用jsonlint

编辑

在我的例子中,您不需要[FromBody]部分,因为您可以将TestModel作为方法的参数传递。

您发送的不是数组。它应该是这样的:

{"test":[
    {"A":"0", "B":"0"}, 
    {"A":"0", "B":"1"}, 
    {"A":"1","B":"1"}
]}