在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){}
当我点击这个动作时,测试参数为空。如何通过请求体接收特定类型的数组?
如果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"}
]}