Asp.net core 如何设置Swashback/swagger ui以在多部分/表单数据请求中以逗号分隔并正确引用的方式呈现字符串数组?

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

我正在使用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<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--
这方面的问题是:

  • 当数据绑定到Action方法的参数时,
    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--