在HTTP POST中发送数组

时间:2015-07-30 06:24:15

标签: c# arrays http asp.net-web-api asp.net-web-api2

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

as.

我有以下数据结构:

{
    {
      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; }
    }

当我点击此动作时,测试参数为空。 如何通过请求正文接收某种类型的数组?

2 个答案:

答案 0 :(得分:2)

如果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作为方法的参数传递。在我看来哪个更好。

答案 1 :(得分:2)

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

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

查看更多here (w3schools).