如何在Swagger UI中使用Dictionary参数?

时间:2017-12-05 13:32:40

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

我希望使用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表达式(数组,对象等),并且无法获取要填充的字典中的任何值(生成的Dictionary对象有0个项目) )。

enter image description here

我有能力改变一切,并想知道如何做到这一点。例如,如果将字典更改为KeyValuePair<string,string>数组有帮助,那就试试吧。

选项我知道我有这个我想避免的:

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

1 个答案:

答案 0 :(得分:2)

我的问题确实是两个人的问题。以下是答案,但只是对第二个问题的部分答案:

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

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

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

回答2:虽然它不能与[FromUri]一起使用,但这适用于[FromBody]DictionaryIDictionary<string,string>会工作):

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

我不确定为什么这不能与FromUri一起使用,但我会问一个单独的问题,比这个问题要集中得多最底层的。出于这个问题的目的,两个参数都可以放入DTO,标记为[FromBody],然后一切都很好。