我的API调用在Postman中正常工作。但是当我从Swagger UI发送请求时,它显示所有请求的“服务器无响应”:
响应机构 无内容
响应代码 0
响应标题
{ "error": "no response from server" }
问题是什么以及如何解决?
浏览器控制台显示以下错误:
无法加载资源:net :: ERR_CONNECTION_REFUSED
未捕获的TypeError:无法读取未定义的属性“长度” 在showStatus(index.js:24) 在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)
net::ERR_CONNECTION_REFUSED
听起来像你需要在你的localhost上启用CORS,以便它在响应中发送Access-Control-Allow-Origin: *
头。如何执行此操作取决于您使用的服务器。更多信息:
https://enable-cors.org/server.html
https://github.com/swagger-api/swagger-ui/#cors-support
您可能还需要允许OPTIONS pre-flight requests。
由于序列化器响应中的Reference Looping,Swagger返回0响应代码。
在获取序列化程序响应时忽略引用循环。
如果您使用的是Web API,请使用以下代码
services.AddMvc()
.AddJsonOptions(opt =>
{
opt.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
});
从swagger配置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"
}
}
就我而言,https存在问题。在swagger配置中,http方案被“禁用”(不可用)。我这样做了:
GlobalConfiguration.Configuration.EnableSwagger(c => { c.Schemes(new[] { "https" }); });
我必须更改它以使其在localhost上的调试中工作:
GlobalConfiguration.Configuration.EnableSwagger(c => { c.Schemes(new[] { "https", "http" }); });
第一个代码段用于生成并启用了https,但在默认配置中在Visual Studio中进行调试时,id无法正常工作。