首页 文章

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

提问于
浏览
1

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

  • 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
    

    规范有两个问题:

    • endpoints 返回PNG图像,但据说可以生成JSON和HTML .

    • 文件响应(包括图像)应该type: file,而不是 type: object .

    在Swagger UI 2.x中,"cannot parse JSON/YAML content"错误是由错误引起的 produces - UI期望JSON响应但是获得二进制响应 . 将 produces 更改为 image/png 应解决UI 2.x的问题 .

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

  • 1

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

    更新(7月22日)

    swagger-ui团队修复了3.0.20版本的错误
    我将该版本合并到我的fork中,您可以在这里获得最新版本:
    https://www.nuget.org/packages/Swagger-Net/8.3.0.2001

相关问题