Aws-lambda-dotnet: Swagger 文档在与 api 网关集成时公开

创建于 2018-01-30  ·  22评论  ·  资料来源: aws/aws-lambda-dotnet

嗨,大家好,

我有一个 .net 核心 web api,它有自己的 swagger 集成文档,通过“swagger/v1/swagger.json”端点公开。 它部署为 lambda。 我还设置了一个 api 网关,它与这个 lambda 集成以公开它的所有 api。

我遇到的问题是我无法通过 /swagger url 访问 swagger 文档。 它总是返回“消息:禁止”。 如果我在本地运行 web api,我绝对可以访问 swagger。

有任何想法吗?

谢谢

杰森

guidance

最有用的评论

我也遇到了同样的问题。 有解决方案-
请确保您在启动文件的名称中添加了舞台,如下所示。 其中 Prod 是我的艺名。

app.UseSwaggerUI(c =>
              {
                  c.SwaggerEndpoint("/Prod/swagger/v1/swagger.json", "GST Console API - V1");

              });

请求@normj关闭它。

所有22条评论

你能创建一个简单的 repo 存储库让我看看吗?

我有相同的问题。

你在这个@jasondaicoder 上取得了任何进展吗?

同样的问题,如果找到修复请更新。 我可以直接访问 json,例如 .. https://...../Prod/swagger/v1/swagger.json 。 由于 API Gateway 支持 swagger,因此正在考虑有关“swagger”路径的一些神奇之处。 但是,使用此页面中的信息http://eatcodelive.com/2017/05/19/change-default-swagger-route-in-an-asp-net-core-web-api/ ,我将其更改为“赃物”,仍然有同样的问题。

有趣的是,当您访问https://..../Prod/swagger 时,它会将您重定向到https://.../swagger ,基本上删除了路径的阶段部分并返回到根目录,然后导致禁止留言。

不是真正的家伙。 我认为这可能是因为 api gateway 应该只对 web api 起作用,而不是对 UI 相关的。 我最终将 UI 托管在其他地方,但通过 api 网关指向了项目的 swagger json 文件。 有用。

谢谢。 嗯,不得不这样做有点痛苦:) 我确实有一个常规的 MVC 主控制器和索引页面作为我部署的一部分,它工作正常。 是的,我只是在读一篇文章,其中有人认为可能与响应不是 json 的地方有关,但我的索引页面工作正常。

使用我的解决方案,您实际上只需要部署一次 UI。 只要您从项目中加载 json 文件,您就无需再执行任何操作。 我们在 S3 上托管 UI 文件。 也许 AWS 团队可以稍后解决这个问题。

有趣.. 你可以在没有运行 kestrel 的情况下在 S3 上部署 .net core ui 吗? 认为 swagger 是一种运行时的东西,需要支持正在运行的 dll 等,例如不仅仅是一组静态文件

@normj ,该项目只是一个带有 Lamdba 入口点的普通 c# weapi。 没什么特别的。 稍后我将尝试在 GitHub 上创建一个示例存储库。 老实说,我认为我的项目没有任何问题,因为其他人也有同样的问题。 我认为这可能与 api 网关内置 swagger 文档有一些冲突。

@rslangham不,您不需要部署您的项目。 您所需要的只是下载您可以从 swagger 站点获取的 swagger ui 静态文件(也许可以在 swagger 站点上找到指向 GitHub 的链接)。

@jasondaicoder感谢您建议使用 swagger ui 静态文件。 我使用不同的实现来做到这一点并且它起作用了。 我下载了 swagger ui 文件并将它们放在我的项目 wwwroot/swaggerui 下。 在 Startup.cs Configure(..) 中,我启用了静态文件访问,例如 app.UseStaticFiles。 我修改了 swagger ui index.html 嵌入的 javascript 以使用 window.location.href 将 url 动态更改为 swagger json 的正确路径,这允许它部署在任何地方并工作。

虽然真的很想找出正确的解决方案:) 再次感谢。

你好,我也遇到了同样的问题,希望能尽快解决。

观察同样的问题。

我也遇到了同样的问题。 有解决方案-
请确保您在启动文件的名称中添加了舞台,如下所示。 其中 Prod 是我的艺名。

app.UseSwaggerUI(c =>
              {
                  c.SwaggerEndpoint("/Prod/swagger/v1/swagger.json", "GST Console API - V1");

              });

请求@normj关闭它。

@AnandKhedkar对我

我也遇到了同样的问题。 有解决方案-
请确保您在启动文件的名称中添加了舞台,如下所示。 其中 Prod 是我的艺名。

app.UseSwaggerUI(c =>
              {
                  c.SwaggerEndpoint("/Prod/swagger/v1/swagger.json", "GST Console API - V1");

              });

请求@normj关闭它。

这确实显示了 Index.html 页面。 但是,它不允许我通过 swagger 接口执行服务。
GET 调用的请求 URL 中的路径再次排除 Prod。
但是,我使用c.RoutePrefix = string.Empty;在根处呈现页面,而不是添加 /swagger。

是否可以设置一个属性,以便在所有相关 url 引用中保持一致?

我也遇到了同样的问题。 有解决方案-
请确保您在启动文件的名称中添加了舞台,如下所示。 其中 Prod 是我的艺名。

app.UseSwaggerUI(c =>
              {
                  c.SwaggerEndpoint("/Prod/swagger/v1/swagger.json", "GST Console API - V1");

              });

请求@normj关闭它。

这确实显示了 Index.html 页面。 但是,它不允许我通过 swagger 接口执行服务。
GET 调用的请求 URL 中的路径再次排除 Prod。
但是,我使用c.RoutePrefix = string.Empty;在根处呈现页面,而不是添加 /swagger。

是否可以设置一个属性,以便在所有相关 url 引用中保持一致?

使用此解决方案解决完美运行,甚至在 swagger 页面的标题中显示基本路径。

关闭,因为看起来已经找到了解决方案。

我也遇到了同样的问题。 有解决方案-
请确保您在启动文件的名称中添加了舞台,如下所示。 其中 Prod 是我的艺名。

app.UseSwaggerUI(c =>
              {
                  c.SwaggerEndpoint("/Prod/swagger/v1/swagger.json", "GST Console API - V1");

              });

请求@normj关闭它。
在哪个文件中定义这个。

我也遇到了同样的问题。 有解决方案-
请确保您在启动文件的名称中添加了舞台,如下所示。 其中 Prod 是我的艺名。

app.UseSwaggerUI(c =>
              {
                  c.SwaggerEndpoint("/Prod/swagger/v1/swagger.json", "GST Console API - V1");

              });

请求@normj关闭它。

这对我有用。
谢谢

我遇到了同样的问题; 但硬编码PROD(艺名)插入代码是不是一种选择,有没有什么办法来确定哪些API网关部署阶段拉姆达下运行? AWS 环境变量什么的?

@grahamehorner这是我在没有硬编码的情况下解决问题的方法。 它适用于我的本地机器和 Lambda

app.UseSwaggerUI(c =>
{
  c.SwaggerEndpoint("v1/swagger.json", "GST Console API - V1");
});

基本上只需使用没有“swagger”和前导“/”的相对路径 url 使用c.SwaggerEndpoint()设置端点。

如果我们提供相对路径 url 而不将“/”引导到c.SwaggerEndpoint() ,则绝对端点 url 将来自

AWS Serverless Url + "/" + c.RoutePrefix + "/" + the supplied url

其中c.RoutePrefix默认设置为“swagger”

例如,如果您的 AWS Serverless Url 是“ https://xyz.central.amazonaws.com/Prod ”,则您的绝对 url 将是“ https://xyz.central.amazonaws.com/Prod/swagger/v1/swagger .json '

此页面是否有帮助?
0 / 5 - 0 等级