【问题标题】:Array of objects not getting detected in Web API在 Web API 中未检测到对象数组
【发布时间】:2019-10-17 03:24:16
【问题描述】:

我正在使用 .NET Core 2.1 开发一个 Web API,其中响应是根据从 WCF 服务接收到的输出来操作的。

我需要一个带有 Get 动词的 API,并且需要将一个复杂对象数组作为输入传递给它。我目前面临的挑战是,没有从输入中检测到数组。我添加了 @987654321 @ 连同输入参数。我正在 Swagger UI 中尝试相同的操作。

尝试将 Name 与 FromQuery 一起添加。

[HttpGet("test")]
public IActionResult Testmethod([FromQuery] Person person)
{
    return Ok(person);
}

模型类:

public class Person
{
    public string Name{ get; set; }
    public int Age{ get; set; }
    public Grade[] grades{ get; set; }
}

public class Grade
{
    public int GradeId { get; set; }
    public string GradeName { get; set; }
    public string Section { get; set; }
}

【问题讨论】:

  • 这里没有对象数组?你是如何调用 API 的?您使用的网址是什么?另外,请注意您的帖子并在下次正确格式化它们。
  • 您是指Grade[] grades 字段吗?
  • Yes.The Grade[] 字段
  • 尝试使用 List
  • 为什么你不使用 POST,你的模型变得相当复杂......你想通过一个长度为 2000 个字符的 URL 提供所有这些信息?!

标签: c# asp.net-web-api .net-core swagger-ui


【解决方案1】:

对于这种情况,Swagger 生成的查询似乎有点错误。正确的查询是:

GET /test
  ?name=thomas
  &age=20
  &grade[0].gradeId=2
  &grade[0].gradeName=Second
  &grade[0].section=Section

外部资源

此问题已在此处记录:https://github.com/domaindrivendev/Swashbuckle.AspNetCore/issues/1832

这里也讲过:OpenAPI query string parameter with list of objects

解决方案

这是 OpenAPI 的问题,我们无法解决。

这是最好的解决方案:

如果您正在设计新的 API(而不是描述现有的 API),请考虑在请求正文中传递对象数组。

https://stackoverflow.com/a/52894157

查询字符串格式因对象而异

这很不寻常,因为如果代码是这样的:

[HttpGet("test")]
public IActionResult Testmethod([FromQuery] SomeQuery query)
{
    // ...
}

public class SomeQuery
{
    public int[] Ids { get; set; }
}

我们的 API 调用如下所示:

GET /test
  ?ids=1
  &ids=2

但是,如果你有一个对象数组,那么 GET 请求的格式就会改变。

测试的版本

  • Swashbuckle.AspNetCore 6.5.0
  • .NET Framework net5.0

【讨论】:

    【解决方案2】:

    试试下面的

    [FromBody] IEnumerable<Person> persons
    

    【讨论】:

    • 从问题 我需要一个带有 Get 动词的 API。另外,是什么让你认为 OP 需要一个可枚举的 Person?
    • 问题出在 Grade[] 对象上。它在请求中为 null,而不是 Person..
    猜你喜欢
    • 2018-01-17
    • 2021-10-02
    • 2018-04-24
    • 2020-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-14
    • 2019-11-09
    相关资源
    最近更新 更多