我使用:https://github.com/swagger-api/swagger-ui.git从Git repo(3.0.19)中删除了最新的Swagger并更新了我的API以使用新版本。
让git describe --tags
确认,我的版本目前为:v3.0.19-6-gaab1403
我遇到的问题是here,其中我的回复是403(我可以在浏览器的检查器中看到这个),虽然我有错误403的响应,但我仍然得到TypeError: Failed to fetch
消息。
以下是我对403响应的定义摘录:
"403": {
"description": "Forbidden",
"headers": {
"Access-Control-Allow-Origin": {
"type": "string"
}
}
},
我还注意到它报告here但是,我知道它不是CORS问题,因为我测试了端点并且OPTIONS返回正确,如果调用端点那么端点也是如此有效信息(我强迫这403)。
有人能指出我正确的方向吗?
更新:我已经对401响应进行了测试,但响应相同。
400正在按预期工作:
答案 0 :(得分:8)
对于遇到此问题的任何人;
经过一天的故障排除和Swagger支持人员指出我正确的方向,结果证明这是由AWS API Gateway自定义授权者中的错误引起的。
我们目前正在使用AWS API Gateway来管理我们的API,这包括通过自定义授权程序管理我们的所有授权。问题是自定义授权者当前不支持在响应中传递标头,并且Swagger UI需要响应头中的$("#bSubmit").on("click", function (){
$("[name='year']").val(2017 - $("[name='quantity']").val());
});
来显示正确的HTTP状态代码。
请参阅此AWS线程有关该问题(已超过一年):
https://forums.aws.amazon.com/thread.jspa?messageID=728839
Swagger UI讨论相同:https://github.com/swagger-api/swagger-ui/issues/3403
编辑/更新
此后,通过使用网关响应解决了这个问题。看到同一个论坛(第2页):
答案 1 :(得分:3)
我在本地开发期间遇到此错误(即与AWS无关)。根本原因(违反CORS)是相同的。以下内容可能会帮助遇到此问题的其他人。
我使用指向connexion的openapi规范设置了http://localhost:9090/。开发服务器启动时,会显示“正在http://0.0.0.0:9090/上运行”。该页面似乎正常工作,但是swagger ui使用openapi规范中的http://localhost:9090/处理后续请求,并在结果中显示TypeError: Failed to fetch
。浏览器控制台显示Access to fetch at 'http://localhost:9090/vr/variation' from origin 'http://0.0.0.0:9090'
。提供的curl
命令运行良好;尽管最初令人困惑,但是curl成功表明存在问题的原因是浏览器阻塞而不是服务器端故障。
(Connexion基于Python flask,并提供对openapi集成的扩展支持。)
答案 2 :(得分:1)
因为跨域问题意味着您的网站托管在本地或端口8000或其他端口上,并且您的招摇号的端口号不同,所以此问题是真实的。我们可以通过授予权限来解决它。
这是节点代码:
app.use( (request, response, next) => {
response.header("Access-Control-Allow-Origin", "*");
response.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
next();
});
我们也可以使用CORS npm来解决。 https://www.npmjs.com/package/cors
答案 3 :(得分:1)
免责声明:-此答案适用于使用Asp.net Core开发的API
当尝试从Swagger UI编辑器访问API时,我遇到了类似的问题。 我试图访问一些使用Asp.net Core开发的API,而Swagger UI编辑器托管在Apache上。我正在面对CORS(跨原始请求)。
我必须修改我的API代码,以允许使用以下代码进行CORS请求: 在具有类“ StartupShutdownHandler”的Startup.cs文件中声明
private readonly string MyAllowSpecificOrigins = "_myAllowSpecificOrigins";
在ConfigureServices方法中添加了一段代码。
var str = ConfigurationHandler.GetSection<string>(StringConstants.AppSettingsKeys.CORSWhitelistedURL);
if (!string.IsNullOrEmpty(str))
{
services.AddCors(options =>
{
options.AddPolicy(MyAllowSpecificOrigins,
builder =>
{
builder.WithOrigins(str);
});
});
}
在“配置方法”中添加了一行代码。
app.UseCors(MyAllowSpecificOrigins);
答案 4 :(得分:0)
请检查为swagger jsdoc提供的swaggerOptions,并检查主机名和基本名是否正确。我之前遇到过相同的问题,并通过更正此问题来解决此问题。希望这也能解决问题。
例如:
const options = {
swagger: "2.0",
swaggerDefinition: {
// options.swaggerDefinition could be also options.definition
info: {
title: "Customer API", // Title (required)
description: "Dummy Customer API for implementing swagger",
contact: {
name: "Stack Overflow"
},
version: "1.0.0" // Version (required)
},
host: "localhost:5000",
basePath: "/"
},
// Path to the API docs
apis: ["SwaggerImplementation/index.js"] // For complex api's pass something like apis: ["./routes/*.js"]
};
答案 5 :(得分:0)
这是因为有时IIS绑定的HTTPS SSL证书会自动变为“未选中”。因此,再次必须手动将SSL证书选择为IIS Express开发证书1。下面我提到了怎么做:
SSL Certificate
= Not Selected
,请选择IIS Express开发证书。问题将会解决。
答案 6 :(得分:0)
在尝试验证访问OAuth2安全的Rest API集时遇到了相同的错误。 API服务器已部署在VM上,并正在使用IPSEC VPN连接到它。实际上,具有基本身份验证的HTTP标头中的用户名/密码是使用/ oauth / token以外的其他API发送的,后端本身使用客户端机密调用http://localhost:8080/api/v0/oauth/token并将令牌返回给客户端。将localhost更改为服务器的实际本地IP后,问题消失了。
答案 7 :(得分:0)
此错误在招摇方面很常见,可能是由于许多可能的原因所致。 就我而言,这是由于连接错误。由于我身边的连接问题,我的摇摇欲坠的页面没有响应。我不得不刷新一次并为我工作。
答案 8 :(得分:0)
我遇到了同样的问题,并且有一个非常简单的解决方法。我使用HTTP访问了我的网站,但它需要HTTP S 。呼叫端点时,我的网站正在重定向到HTTP S 。
这违反了“原产地政策”: https://docs.microsoft.com/en-us/aspnet/core/security/cors?view=aspnetcore-2.2
答案 9 :(得分:-1)
每个解决方案都绝对正确:) 但就我而言,我的webconfig文件中有该行
<environmentVariable name="ASPNETCORE_HTTPS_PORT" value="5001" />
我只是将ASPNETCORE_HTTPS_PORT替换为ASPNETCORE_HTTP_PORT,错误已经消失了:)。所以最后一行是
<environmentVariable name="ASPNETCORE_HTTP_PORT" value="5001" />
用端口替换5001。
答案 10 :(得分:-1)
如果是 .NET Core API,请尝试在 StartUp.cs 中注释掉以下方法调用 如下图,
<块引用>// app.UseHttpsRedirection();