2017-07-20 28 views
1

我有POST方法返回“image/png”内容的场景。 API在Postman中完美工作,我能够看到图像。Swagger UI在POST中不显示图像/ png内容

我使用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

+0

没有Swagger UI版本5.6.0。最新的是3.0.19,并且PNG图像响应显示正常https://i.stack.imgur.com/3mVHc.png。你能否澄清你使用的是哪个Swagger UI版本和浏览器?你能发布你的Swagger规范吗? – Helen

+0

@Helen我通过nuget包安装了swagger https://www.nuget.org/packages/Swashbuckle这个包的版本是5.6。我不知道相应版本的Swagger UI,因为它没有列出。同样在你发布的图片上,我看到它是GET请求。我的问题发生在从POST返回的图像上。 –

+0

我想重现这个问题,请看这里:http://swashbuckletest.azurewebsites.net/swagger/ui/index?filter = Image#Image/Image_Post – HelderSepu

回答

1

正如在评论中澄清,M_M最初使用扬鞭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

在扬鞭UI 2.x中,将“无法解析JSON/YAML内容”错误是由错误造成produces - UI需要一个JSON响应,但得到的二进制响应代替。将produces更改为image/png应该可以解决UI 2.x的问题。

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

+0

因为我使用2.x版本,这个答案实际上是我的情况下的正确答案。我使用https://stackoverflow.com/a/36348869/5318253添加了“image/png”作为预期的内容结果,现在我可以在Swagger文档中成功从POST调用接收图像。非常感谢@海伦 –

1

招摇的用户界面小组证实,这只是发生在POST错误:我建议你使用GET
https://github.com/swagger-api/swagger-ui/issues/3435
作为一种变通方法(如果可能的话)


更新(月/ 22)

招摇的UI团队已经固定在3.0.20版本的bug 我纳入该版本到我的叉子,你可以得到最新的位置:
https://www.nuget.org/packages/Swagger-Net/8.3.0.2001

+0

谢谢你的帮助@HelderSepu!最后,海伦的答案在我的案例中奏效,因为我使用Swagger 2.x,它带有swashbuckle。 –

+0

好,我仍然建议你尝试Swagger-Net,在那个上我使用的是ui 3.x,这是一个主要的改进,超过了2 – HelderSepu