为什么Swagger UI中“服务器没有响应”?

时间:2017-08-01 13:53:37

标签: swagger-ui

我的API调用在Postman中正常工作。但是当我从Swagger UI发送请求时,它显示所有请求的“服务器没有响应”:

  

回复正文
  没有内容

     

响应代码
  0

     

响应标题

{
  "error": "no response from server"
}

Swagger UI - no response from server

问题是什么以及如何解决?

浏览器控制台显示以下错误:

  

无法加载资源:net :: ERR_CONNECTION_REFUSED

     

未捕获的TypeError:无法读取未定义的属性“长度”   在showStatus(index.js:24)
  at showErrorStatus(index.js:24)
  错误(index.js:607)spec-converter.js:533
  在Request.callback(index.js:24)
  在Request.crossDomainError(index.js:24)
  在XMLHttpRequest.xhr.onreadystatechange(index.js:24)

Swagger UI - console errors

4 个答案:

答案 0 :(得分:2)

由于序列化器响应中的Reference Looping,Swagger返回0响应代码。

在获取序列化程序响应时忽略引用循环。

如果您使用的是Web API,请使用以下代码

services.AddMvc()
                .AddJsonOptions(opt =>
                { 
                  opt.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
                });

答案 1 :(得分:1)

从swagger config json文件(在我的情况下为tsoa.json)中删除方案,然后重新启动服务器。它对我有用。

{
    "readme": "https://github.com/lukeautry/tsoa/blob/HEAD/tsoa.json",
    "swagger": {
        "outputDirectory": "./dist/src",
        "entryFile": "./src/server.ts",
        "basePath": "/",
        "schemes": [
            "http",
            "https"
          ],
        "securityDefinitions": {
            "basic": {
                "type": "basic"
            }
        }
    },
    "routes": {
        "basePath": "/",
        "entryFile": "./src/server.ts",
        "routesDir": "./src",
        "authenticationModule": "./src/security/Authentication"
    }
}

答案 2 :(得分:0)

net::ERR_CONNECTION_REFUSED sounds like you need to enable CORS on your localhost, so that it sends the Access-Control-Allow-Origin: * header in responses. How you do this depends on the server you use. More info here:

https://enable-cors.org/server.html

https://github.com/swagger-api/swagger-ui/#cors-support

You may also need to allow OPTIONS pre-flight requests.

答案 3 :(得分:0)

就我而言,https有问题。在swagger config中,http方案被“禁用”(不可用)。我是这样的:

 GlobalConfiguration.Configuration.EnableSwagger(c => { c.Schemes(new[] { "https" }); });

我不得不对其进行更改,以使其能够在localhost上进行调试:

GlobalConfiguration.Configuration.EnableSwagger(c => { c.Schemes(new[] { "https", "http" }); });

第一个代码段在启用了https的生产环境中有效,但是在默认配置下在Visual Studio中调试时id无效。