【问题标题】:Swagger UI does not display image/png content in POSTSwagger UI 在 POST 中不显示图像/png 内容
【发布时间】:2017-07-20 20:05:49
【问题描述】:

我有一个 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

【问题讨论】:

标签: swagger swagger-ui swashbuckle


【解决方案1】:

正如 cmets 中所阐明的,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 中修复。

【讨论】:

  • 因为我使用的是 2.x 版,所以这个答案实际上是我的正确答案。我使用stackoverflow.com/a/36348869/5318253 添加“image/png”作为预期的内容结果,现在我可以在我的 Swagger 文档中成功接收来自 POST 调用的图像。非常感谢@Helen
【解决方案2】:

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


更新(7 月 22 日)

swagger-ui 团队已修复 3.0.20 版本的 bug
我将该版本合并到我的 fork 中,您可以在此处获取最新版本:
https://www.nuget.org/packages/Swagger-Net/8.3.0.2001

【讨论】:

  • 感谢您的帮助@HelderSepu!最终海伦的回答对我来说是有效的,因为我使用的是 swashbuckle 附带的 Swagger 2.x。
  • 好,我还是推荐你试试 Swagger-Net,我使用的是 ui 3.x,这是对 2 的重大改进
猜你喜欢
  • 2016-08-30
  • 2021-09-15
  • 2021-05-07
  • 2021-07-27
  • 2020-06-10
  • 2014-04-29
  • 2015-07-31
  • 2014-08-14
  • 2021-12-09
相关资源
最近更新 更多