【问题标题】:How can I use a Dictionary parameter with Swagger UI?如何在 Swagger UI 中使用 Dictionary 参数?
【发布时间】:2017-12-05 13:32:40
【问题描述】:

我希望使用 Swashbuckle 为如下所示的 Web API 方法生成 Swagger 文档和 Swagger UI(它实际上是与 PDF 的邮件合并):

    [HttpPost]
    [ResponseType(typeof(byte[]))]
    public HttpResponseMessage MergeValues([FromUri]Dictionary<string, string> mergeValues,
                                           [FromBody]byte[] pdfTemplate)
    {
        return MergeStuff();
    }

这目前不起作用,或者至少我不确定如何与生成的 Swagger UI 交互。

这将创建以下 Swagger UI,这似乎是合理的,但我不确定如何处理它才能正确填充它(或者它是否正确)。我正在使用最新 Nuget 中的几乎所有默认 Swashbuckle 设置。

字节数组如果我为字节数组输入Base64编码的文本,字节数组总是显示为空。结果我只需要我的BASE64文本被包围双引号,然后就可以了。

字典:我尝试了各种类型的 JSON 表达式(数组、对象等),但无法获取要填充的字典中的任何值(生成的字典对象有 0 个项目)。

我有能力改变事情,我想知道如何做到这一点。例如,如果将字典更改为 KeyValuePair&lt;string,string&gt; 的数组有帮助,那么我们就这样做吧。

我知道我想要避免的选项:

  1. 将这些输入类型更改为字符串并进行我自己的手动反序列化/解码。我想明确我的类型,不要太花哨。
  2. 自定义活页夹。我想使用标准/默认绑定器,因此我需要维护的代码/复杂性更少。

【问题讨论】:

  • 您似乎正在尝试上传文件,请看这里:github.com/domaindrivendev/Swashbuckle/issues/120
  • 实际上,对于byte[] 文件,我只需要在base64 内容周围加上双引号。加上引号,这行得通。现在我只需要找出如何处理Dictionary

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


【解决方案1】:

我的问题确实是两方面的。以下是答案,虽然只是第二个问题的部分答案:

问题一: 如何填写字节数组的数据?

答案 1:为其粘贴您的 base64 编码值,但请务必在开头和结尾处用双引号括住该内容。

问题 2: 如何填写字典的数据?

答案 2:虽然它不适用于 [FromUri],但它适用于 [FromBody]DictionaryIDictionary&lt;string,string&gt; 都可以使用):

{"FirstName":"John","LastName":"Doe"}

我不确定为什么这不适用于FromUri,但我将提出一个单独的问题,该问题比这个问题更集中,以便深入了解。对于这个问题,两个参数都可以放入 DTO 中,标记为 [FromBody],然后一切都很好。

【讨论】:

    猜你喜欢
    • 2015-02-18
    • 2020-12-22
    • 1970-01-01
    • 2022-08-24
    • 2017-04-09
    • 1970-01-01
    • 1970-01-01
    • 2022-08-19
    • 1970-01-01
    相关资源
    最近更新 更多