Swagger 和.net Core 升级问题

Swagger and .net Core upgrade issue

正在开发 .net 核心应用程序并使用 swagger

我最近将 .net core 2.1 升级到 3.1,因此不得不将我的 swagger 包也从 4.0.1 升级到 6.3.0

通过上述升级,我发现我们的 api 端点之一出现了非常奇怪的行为。详情如下:

我们的端点如下:

[HttpGet("GetCount", Name = "GetCount")]
public async Task<IActionResult> GetUsersDataCount(string region, List<string> usersList)
{
    //code logic here
}

上面代码在swagger中的表现如下:

.net 核心 2.1

使用以上版本,我可以将区域添加为参数,将用户列表添加为数组(添加项目),如图 1 所示

.net 核心 3.1

在上面的版本中,我可以将区域添加为参数,但是 usersList 我必须将其添加为 RequestBody,如图 2 所示

通过上述更改,这打破了使用此 API 的团队。

任何关于为什么它以这种方式运行或我需要进行哪些更改才能使其工作的任何输入

我不知道它会从 .NET Core 2.1 更改为 .NET Core 3.1,但我的印象是 List<T> 被 Web API 视为复杂类型因此预计来自 body.

您可以尝试在参数列表中添加 FromUri attribute 以明确将其标记为查询参数的一部分:

[HttpGet("GetCount", Name = "GetCount")]
public async Task<IActionResult> GetUsersDataCount(
    string region, 
    [FromUri] List<string> usersList)
{
}

更多信息在这里:Why do we have to specify FromBody and FromUri?


我在使用 [FromUri] 获取查询参数时从未遇到过问题,但 OP 说 [FromQuery] 有效。