gpt4 book ai didi

c# - 在 HTTP POST 中发送数组

转载 作者:可可西里 更新时间:2023-11-01 16:55:50 26 4
gpt4 key购买 nike

我想使用 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; }
}

这是我的 Action :

        [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 作为方法的参数传递。在我看来,这更好。

关于c# - 在 HTTP POST 中发送数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31716503/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com