Swagger UI不会在POST中显示image / png内容

时间:2017-07-20 20:05:50

标签: swagger swagger-ui swashbuckle

我有一个场景,POST方法返回" image / png"内容。 API在Postman中完美运行,我能够看到图像。

我使用Swagger来记录我的API。由于某种原因"尝试"功能崩溃任何返回图像的POST方法。它冻结加载,我在浏览器控制台中看到以下内容:

cannot parse JSON/YAML content 
swagger-ui-min-js:14 Uncaught TypeError: Failed to execute 'createObjectURL' on 'URL': No function was found that matched the signature provided.
at C.n.showStatus (swagger-ui-min-js:14)
at showCompleteStatus (swagger-ui-min-js:14)
at response (swagger-ui-min-js:9)
at h (swagger-ui-min-js:7)
at t.on.response (swagger-ui-min-js:7)
at swagger-ui-min-js:7
at h.callback (swagger-ui-min-js:13)
at h.<anonymous> (swagger-ui-min-js:13)
at h.r.emit (swagger-ui-min-js:13)
at XMLHttpRequest.n.onreadystatechange (swagger-ui-min-js:13)

有关如何解决此问题的任何想法? API工作(至少在Postman中),它只是Swagger UI似乎有问题。 我通过nuget包Swashbuckle.Core和Swashbuckle版本5.6.0安装了Swagger

2 个答案:

答案 0 :(得分:1)

swagger-ui团队证实这只是一个只在POST上发生的错误:
https://github.com/swagger-api/swagger-ui/issues/3435
作为一种解决方法,我建议您使用GET(如果可能)


更新(7月22日)

swagger-ui团队修复了版本3.0.20的错误 我把那个版本合并到我的叉子里,你可以在这里得到最新版本:
https://www.nuget.org/packages/Swagger-Net/8.3.0.2001

答案 1 :(得分:1)

正如评论中所阐明的,M_M最初使用的是Swagger UI 2.x,规范看起来像这样:

paths:
  /api/PngImage:
    post:
      produces:
        - application/json
        - text/json
        - text/html
      responses:
        200:
          description: OK
          schema:
            type: object

规范有两个问题:

  • 端点返回PNG图像,但据说可以生成JSON和HTML。
  • 文件回复(包括图片)应为type: file,而不是type: object

在Swagger UI 2.x中,“无法解析JSON / YAML内容”错误是由错误的produces引起的 - UI期望JSON响应但是会得到二进制响应。将produces更改为image/png可以解决UI 2.x的问题。

然而,Swagger UI 3.0.19有一个不同的问题 - 当响应是一个图像时,UI将请求重复到同一个端点,但是使用GET来显示图像而不是渲染现有的响应。因此,如果端点不接受GET,或者GET返回的图像与POST不同,则不会显示原始图像响应。 HelderSepu reported the double request issue给Swagger UI开发人员,并在Swagger UI 3.0.20中修复。