Asp.net core 如何设置Swashback/swagger ui以在多部分/表单数据请求中以逗号分隔并正确引用的方式呈现字符串数组?
我正在使用ASP.NET Core 3.0(Asp.net core 如何设置Swashback/swagger ui以在多部分/表单数据请求中以逗号分隔并正确引用的方式呈现字符串数组?,asp.net-core,asp.net-core-webapi,swagger-ui,swashbuckle,Asp.net Core,Asp.net Core Webapi,Swagger Ui,Swashbuckle,我正在使用ASP.NET Core 3.0(netcoreapp3.0)和Swashback 5.0.0-rc4() 我有一个API控制器操作方法,它接受上传的文件(即IFormFile)和一些元数据和标记,以与发布的文件相关联: public async Task<IActionResult> Post( string fileId = null, IFormFile file = null, [FromForm] IDictionary<stri
netcoreapp3.0
)和Swashback 5.0.0-rc4(
)
我有一个API控制器操作方法,它接受上传的文件(即IFormFile
)和一些元数据和标记,以与发布的文件相关联:
public async Task<IActionResult> Post(
string fileId = null,
IFormFile file = null,
[FromForm] IDictionary<string, object> metadata = null,
[FromForm] IEnumerable<string> tags = null)
{
// ...
}
在我看来,我们有:
"tags": {
"type": "array",
"items": {
"type": "string"
}
似乎正确:我希望接收字符串数组
但是,当swagger ui呈现表单时,最终用户输入所需的数据,提交的请求并不像我预期的那样。我希望标记
数据类似于:
------WebKitFormBoundaryKQWA8MEJTEXgMvsj
Content-Disposition: form-data; name="metadata"
{
"additionalProp1": {},
"additionalProp2": {},
"additionalProp3": {}
}
------WebKitFormBoundaryKQWA8MEJTEXgMvsj
Content-Disposition: form-data; name="tags"
["string1","string2",",","string4\""]
------WebKitFormBoundaryKQWA8MEJTEXgMvsj--
但我最终得到的是:
------WebKitFormBoundaryKQWA8MEJTEXgMvsj
Content-Disposition: form-data; name="metadata"
{
"additionalProp1": {},
"additionalProp2": {},
"additionalProp3": {}
}
------WebKitFormBoundaryKQWA8MEJTEXgMvsj
Content-Disposition: form-data; name="tags"
string1,string2,,string4"
------WebKitFormBoundaryKQWA8MEJTEXgMvsj--
这方面的问题是:
IEnumerable tags
参数只包含一个字符串,而不是我期望的4个字符串元数据
参数似乎是JSON编码的,我希望标记
参数也是如此。然而,OpenAPI 3.0.2规范指出
如果属性是复杂的,或者是复杂值数组,则默认内容类型为application/json
。。。这就解释了元数据参数的JSON编码,以及
如果属性是基元或基元值数组,则默认内容类型为text/plain
。。。啊,这解释了标记
参数的编码,因为它是一个基本值数组
我认为潜在的问题是,swagger ui尚不支持可为多部分参数设置的“编码对象”,但有人有任何建议、技巧、解决方法或其他可能有用的想法吗
------WebKitFormBoundaryKQWA8MEJTEXgMvsj
Content-Disposition: form-data; name="metadata"
{
"additionalProp1": {},
"additionalProp2": {},
"additionalProp3": {}
}
------WebKitFormBoundaryKQWA8MEJTEXgMvsj
Content-Disposition: form-data; name="tags"
string1,string2,,string4"
------WebKitFormBoundaryKQWA8MEJTEXgMvsj--