【问题标题】:Swagger UI - " TypeError: Failed to fetch" on valid responseSwagger UI - 有效响应中的“TypeError:无法获取”
【发布时间】:2017-12-22 17:23:19
【问题描述】:

我刚刚使用:https://github.com/swagger-api/swagger-ui.git 从 Git 存储库 (3.0.19) 中下载了最新的 Swagger,并更新了我的 API 以使用新版本。

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

我遇到的问题是 here 描述的问题,我的响应是 403(我可以在浏览器的检查器中看到这个),虽然我对错误 403 有响应,但我仍然收到 @987654334 @消息。

这是我对 403 响应的定义中的一个 sn-p:

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

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

谁能指点我正确的方向?

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

400 按预期工作:

【问题讨论】:

  • 如果处于开发阶段,请确保解决方案/服务器正在实际运行,并且您没有尝试使用缓存网页。

标签: swagger swagger-ui swagger-2.0


【解决方案1】:

这是因为有时您的 IIS 绑定的 HTTPS SSL 证书会自动转到未选择。所以你又一次提出了一个类似的问题,但很少有好的答案请参考此链接以手动选择将 SSL 证书获取到 1 IIS Express 开发证书 1。下面我提到了如何回答:

打开 IIS 单击默认网站。 在右上角你会看到一些设置点击“绑定”,你会得到一个站点绑定窗口。 然后您将获得 http 和 https 详细信息。 在那单击“https”并单击编辑,然后您将获得另一个窗口编辑站点绑定。 在该窗口中检查 SSL 证书。 如果 SSL 证书 = 未选择,请选择 IIS Express 开发证书。 然后停止并启动 IIS。 问题将得到解决。

【讨论】:

    【解决方案2】:

    如果是 .NET Core API,请尝试在 StartUp.cs 中注释掉以下方法调用 如下所示,

    // app.UseHttpsRedirection();

    【讨论】:

      【解决方案3】:

      我遇到了同样的问题,并且有一个非常简单的解决方法。我使用 HTTP 访问我的网站,但它需要 HTTPS。我的网站在调用端点时重定向到 HTTPS

      这违反了“同源政策”: https://docs.microsoft.com/en-us/aspnet/core/security/cors?view=aspnetcore-2.2

      【讨论】:

      • 我也是,这样解决。刚刚将 Schemes HTTPS 更改为 HTTP,因为我的 API 在 HTTP 上。
      • 我在 .NET Core 应用程序中遇到了同样的问题。问题是Configure 方法中我的Startup.cs 文件中的这一行:app.UseHttpsRedirection();。这导致从 HTTP 切换到 HTTPS,从而导致 CORS 错误。
      【解决方案4】:

      每个解决方案肯定都是正确的 :) 但就我而言,我的 webconfig 文件中有这一行

       <environmentVariable name="ASPNETCORE_HTTPS_PORT" value="5001" />  
      

      我只是将 ASPNETCORE_HTTPS_PORT 替换为 ASPNETCORE_HTTP_PORT 并且错误已经消失 :)。所以最后一行是

        <environmentVariable name="ASPNETCORE_HTTP_PORT" value="5001" />
      

      将 5001 替换为您的端口。

      【讨论】:

        【解决方案5】:

        这个错误在招摇方面是普遍的,可能是由于许多可能的原因。 就我而言,这是由于连接错误。由于我身边的连接问题,我的招摇页面没有响应。我必须刷新一次并为我工作。

        【讨论】:

          【解决方案6】:

          我在尝试验证访问 OAuth2 保护的 Rest API 集时遇到了同样的错误。 API 服务器部署在 VM 上并使用 IPSEC VPN 连接到它。实际上,具有基本身份验证的 HTTP 标头中的用户名/密码是使用 /oauth/token 以外的单独 API 发送的,后端本身使用客户端密钥调用 http://localhost:8080/api/v0/oauth/token 并将令牌返回给客户端。将 localhost 更改为服务器的实际本地 IP 后,问题消失了。

          【讨论】:

            【解决方案7】:

            请检查提供给 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"]
            };
            

            【讨论】:

              【解决方案8】:

              免责声明:- 此答案适用于使用 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);
              

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

              【讨论】:

                【解决方案9】:

                我在本地开发过程中遇到了这个错误(即与 AWS 无关)。根本原因(违反CORS)是相同的。以下内容可能会对遇到此问题的其他人有所帮助。

                我使用引用 http://localhost:9090/ 的 openapi 规范设置了 connexion。当开发服务器启动时,它会显示“Running on http://0.0.0.0:9090/”。该页面似乎工作,但招摇 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 集成的扩展支持。)

                【讨论】:

                【解决方案10】:

                因为跨域问题是指你的网站不是托管在本地或者是8000端口或者不同的端口,而且你swagger的端口号不同,所以这个问题是真的。我们可以通过授予权限来修复它。

                这是节点代码:

                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

                【讨论】:

                  【解决方案11】:

                  对于遇到此问题的任何人;

                  经过一天的故障排除和 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

                  【讨论】:

                  猜你喜欢
                  • 2019-10-27
                  • 1970-01-01
                  • 1970-01-01
                  • 2014-10-29
                  • 1970-01-01
                  • 1970-01-01
                  • 2020-03-01
                  • 2021-03-29
                  • 1970-01-01
                  相关资源
                  最近更新 更多