【问题标题】:Setting CORS via API Gateway for Serverless Architecture Model Proxy Endpoint通过 API 网关为无服务器架构模型代理端点设置 CORS
【发布时间】:2017-06-16 08:30:04
【问题描述】:

我正在使用 AWS Visual Studio Toolkit 开发 C#/.Net 无服务器应用程序,但在弄清楚我在 CORS 配置方面缺少什么时遇到了一些麻烦。我的项目基于工具包中包含的 ASP.Net 示例,该示例将 API Gateway 配置为具有单个 API 端点,作为 ASP.Net Web API 框架的代理。

在 chrome 中测试这个应用程序(服务于本地节点项目)我得到No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:8080' is therefore not allowed access.

我知道这意味着我必须在 API Gateway 端点上配置 CORS,但我似乎遗漏了一些东西。我使用操作下拉菜单来启用 CORS...

但是我得到了一些错误并且问题仍然存在。

我使用 chrome 扩展程序(暂时)禁用了 CORS,并确认 API 端点在没有 CORS 的情况下正常工作。

那么我在这里错过了什么?在线设置 CORS 的示例通常没有设置使用这样的包罗万象的端点的说明,甚至将 GET 分解为自己的方法似乎也无济于事。

另外一个问题,如果我缺少一些 CORS 配置,有没有一种好方法可以将其集成到 serverless.template 文件或其他一些自动部署步骤中?

【问题讨论】:

    标签: amazon-web-services cors aws-lambda aws-api-gateway serverless-framework


    【解决方案1】:

    这与您的ANY 代理方法有关。如此处所述:http://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-cors.html

    注意 将上述说明应用于代理集成中的 ANY 方法时,将不会设置任何适用的 CORS 标头。相反,您依靠集成后端返回适用的 CORS 标头,例如 Access-Control-Allow-Origin

    因此,您必须让后端 API 返回适当的 CORS 标头。

    【讨论】:

    • 我可能错了,但我认为 API Gateway 会在 OPTIONS 调用中返回 CORS 标头。这是您的后端需要返回 Access-Control-Allow-Origin 标头的实际调用。
    【解决方案2】:

    您需要在您的服务器上拥有标头以及 api 网关。 请参阅此示例: - 将 cors 标头应用于静态存储桶网站

    https://www.codeproject.com/Articles/1178781/Serverless-Architecture-using-Csharp-and-AWS-Amazo

    【讨论】:

      【解决方案3】:

      要使 API 正常工作,必须做两件事: 1. options 方法必须正确设置 - 通常使用 API 网关上的模拟方法完成。 2. 代码中的 HTTP 方法实现必须正确返回 CORS 标头。搜索一下,这方面的文章不少。

      对我来说,问题是第 1 点;当我使用 .NET Core 开发 API-Gateway Lambda 集成时,使用 API Gateway 的“启用 CORS”按钮对我不起作用。我也没有找到在 serverless.template 文件中添加创建选项方法的方法。

      这是另一种方法;从 CLI 或 VisualStudio 发布 lambda 后,在 API 端点上触发 PUT 请求并传递包含选项方法 defs 的 swagger 定义,并确保设置查询参数 mode=merge。您可以使用 PostMan 来执行此操作。

      您使用的 DotNet 实用程序与此处解释的功能相同: http://sbytestream.pythonanywhere.com/blog/Enabling-APIGateway-CORS 源代码也可以在 GitHub 上找到。

      【讨论】:

        猜你喜欢
        • 2018-01-26
        • 2021-05-06
        • 2017-12-18
        • 2021-04-30
        • 1970-01-01
        • 2017-08-15
        • 2019-10-05
        • 2017-03-19
        • 2016-05-15
        相关资源
        最近更新 更多