【发布时间】:2021-07-04 20:25:58
【问题描述】:
我对 Web 开发还很陌生,而且总的来说很招摇,所以如果这个问题太天真了,我深表歉意。
我将使用 Visual Studio 2019 中的 Asp.Net Core Web Api 模板来更好地解释我的问题,因此请考虑该环境,以防我遗漏了一些信息(或只是要求缺少的部分我会带来)。
我们有一个带有简单 GET 的 WeatherForecastController 类(我包含了 names 参数):
[HttpGet]
public IEnumerable<WeatherForecast> Get(IEnumerable<string> names)
{
//...
}
当我尝试使用 Swagger 页面测试此请求时,它无法识别 name 参数。
我已经进行了其他测试以了解发生了什么,我发现了以下内容:
- Swagger 确实可以与 IEnumerable 一起使用,因为如果参数类型为
IEnumerable<IFormFile>(它会显示已上传文件的列表、显示文件选择对话框等),它会很好地工作; - 我尝试将参数封装在 DTO 类中,它似乎破坏了更多的东西(即使
IEnumerable<IFormFile>似乎在 DTO 中也不起作用 em> 类;只有在[HttpVerb]方法的参数列表中直接传递才有效; - 我尝试了其他类似类型以及
ICollection<string>、List<string>、string[];它们似乎都不起作用; - 使用
bool、int等基本类型作为IEnumerable<T>的类型参数时也会出现同样的问题;
那么发生了什么?我应该设置某种配置值以便它可以处理原始类型的集合吗?
更新显示问题的图片:
... Get(string names, IEnumerable<IFormFile> file):
... Get(IEnumerable<string> names, IFormFile file):
如您所见,当参数列表中的任何参数为 IEnumerable 时,swagger UI 不会像第二张图片那样正确显示请求的字段。
【问题讨论】:
-
你用这个尝试了什么查询字符串?
-
@Ctznkane525 问题不在于查询字符串,问题在于使用 swagger UI 组装查询字符串,我将在一分钟内使用显示问题的打印屏幕更新问题。
-
@Ctznkane525 刚刚用 2 张图片更新了问题,显示了何时正确和何时出错。
-
在数组参数之前添加 [FromBody] 属性。我认为 Swagger UI 在 formData 中无法正确处理数组参数。
-
@AliReza 将其封装在 DTO 类中并使用
[FromForm]成功了,谢谢!你想把它放在答案中吗?