Swagger UI - 有效响应中的“TypeError:无法获取”

问题描述 投票:10回答:4

我刚刚使用:https://github.com/swagger-api/swagger-ui.git从Git repo(3.0.19)中删除了最新的Swagger并更新了我的API以使用新版本。

Ran git describe --tags确认,我的版本目前是:v3.0.19-6-gaab1403

我遇到的问题是一个描述here,我的响应是403(我可以在浏览器的检查器中看到这个),虽然我有错误403的响应,我仍然得到TypeError: Failed to fetch消息。

enter image description here

enter image description here

这是我对403响应的定义的片段:

                    "403": {
                    "description": "Forbidden",
                    "headers": {
                        "Access-Control-Allow-Origin": {
                            "type": "string"
                        }
                    }
                },

我也注意到它报告了here然而,我知道它不是CORS问题,因为我测试了端点并且OPTIONS返回正确,如果使用有效信息调用端点(我强制使用403)。

有人能指出我正确的方向吗?

更新:我已经测试了401响应,响应相同。

enter image description here

并且400正在按预期工作:

enter image description here

swagger swagger-ui swagger-2.0
4个回答
9
投票

对于任何遇到这个问题的人;

经过一天的故障排除和Swagger支持人员指出我正确的方向后,事实证明这是由AWS API Gateway自定义授权人员中的错误引起的。

我们目前正在使用AWS API Gateway来管理我们的API,这包括通过自定义授权器管理我们的所有授权。问题是自定义授权者当前不支持在响应中传递标头,并且Swagger UI需要响应头中的Access-Control-Allow-Origin:*来显示正确的HTTP状态代码。

请参阅此AWS线程有关该问题(已超过一年):

https://forums.aws.amazon.com/thread.jspa?messageID=728839

Swagger UI讨论相同:https://github.com/swagger-api/swagger-ui/issues/3403

编辑/更新

此后,通过使用网关响应解决了这个问题。看到同一个论坛(第2页):

https://forums.aws.amazon.com/thread.jspa?messageID=728839


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命令工作正常;虽然最初令人困惑,但卷曲成功是一个线索,问题是由于浏览器阻塞而不是服务器端故障。

(Connexion基于Python瓶,为openapi集成提供扩展支持。)


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


1
投票

免责声明: - 这个答案适用于使用Asp.net Core开发的API

尝试从Swagger UI编辑器访问API时,我遇到了类似的问题。我试图访问使用Asp.net Core开发的一些API,其中Swagger UI编辑器托管在Apache上。我正面临着CORS(Cross Orgin Request)。

我必须使用以下代码修改我的API代码以允许CORS请求: - 在具有类“StartupShutdownHandler”的Startup.cs文件中声明

private readonly string MyAllowSpecificOrigins = "_myAllowSpecificOrigins";

在ConfigureServices Method中添加了一段代码。

var str = ConfigurationHandler.GetSection<string>(StringConstants.AppSettingsKeys.CORSWhitelistedURL);
        if (!string.IsNullOrEmpty(str))
        {
            services.AddCors(options =>
            {
                options.AddPolicy(MyAllowSpecificOrigins,
                builder =>
                {
                    builder.WithOrigins(str);
            });
            });
        }

在Configure Method中添加了一行代码。

 app.UseCors(MyAllowSpecificOrigins);

参考Enable Cross-Origin Requests (CORS) in ASP.NET Core

© www.soinside.com 2019 - 2024. All rights reserved.