在 HTTP POST 中发送数组
Sending an Array in an HTTP POST
我想使用 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
class 是一样的,只有 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"}
]}
我想使用 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
class 是一样的,只有 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"}
]}