我想使用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; }
}
当我点击此动作时,测试参数为空。 如何通过请求正文接收某种类型的数组?
答案 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"}
]}