通过 API 网关为无服务器架构模型代理端点设置 CORS
Setting CORS via API Gateway for Serverless Architecture Model Proxy Endpoint
我正在使用 AWS Visual Studio 工具包开发 C#/.Net 无服务器应用程序,我在弄清楚 CORS 配置方面缺少什么时遇到了一些麻烦。我的项目基于工具包中包含的 ASP.Net 示例,该示例将 API 网关配置为具有单个 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 网关端点上配置 CORS,但我似乎遗漏了一些东西。我使用操作下拉菜单来启用 CORS...
但是我遇到了一些错误并且问题仍然存在。
我使用 chrome 扩展来禁用 CORS(暂时)并确认 API 端点在没有 CORS 的情况下也能正常工作。
那么我在这里缺少什么?在线设置 CORS 的示例通常没有像这样设置使用的包罗万象的端点的说明,甚至将 GET
分解成它自己的方法似乎也无济于事。
作为一个附加问题,如果我缺少某些 CORS 配置,是否有将其集成到 serverless.template
文件或其他一些自动部署步骤中的好方法?
这与您的 ANY
代理方法有关。如此处所述:http://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-cors.html
Note
When applying the above instructions to the ANY method in a proxy integration, any applicable CORS headers will not be set. Instead, you rely on the integration back end to return the applicable CORS headers, such as Access-Control-Allow-Origin
所以你必须让你的后端 API return 合适的 CORS headers。
您的服务器需要 header 以及 api 网关。
看这个例子: - cors header 应用于静态桶网站
https://www.codeproject.com/Articles/1178781/Serverless-Architecture-using-Csharp-and-AWS-Amazo
要使 API 正常工作,必须完成两件事:
1. 必须正确设置选项方法——通常在 API 网关上使用模拟方法来完成。
2. 代码中的 HTTP 方法实现必须 return CORS header 正确。搜索一下,这方面的文章不少。
对我来说,问题是第 1 点;当我使用 .NET Core 开发 API-Gateway Lambda 集成时,使用 API 网关 'Enable CORS' 按钮对我不起作用。我也没有找到在 serverless.template 文件中添加创建选项方法的方法。
这是另一种方法;从 CLI 或 VisualStudio 发布 lambda 后,在 API 端点上触发 PUT 请求并传递包含选项方法 defs 的 swagger 定义,并确保设置查询参数 mode=merge。您可以使用 PostMan 来执行此操作。
或
您使用的 DotNet 实用程序执行与此处说明的相同的操作:
http://sbytestream.pythonanywhere.com/blog/Enabling-APIGateway-CORS
GitHub 上也提供了源代码。
我正在使用 AWS Visual Studio 工具包开发 C#/.Net 无服务器应用程序,我在弄清楚 CORS 配置方面缺少什么时遇到了一些麻烦。我的项目基于工具包中包含的 ASP.Net 示例,该示例将 API 网关配置为具有单个 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 网关端点上配置 CORS,但我似乎遗漏了一些东西。我使用操作下拉菜单来启用 CORS...
但是我遇到了一些错误并且问题仍然存在。
我使用 chrome 扩展来禁用 CORS(暂时)并确认 API 端点在没有 CORS 的情况下也能正常工作。
那么我在这里缺少什么?在线设置 CORS 的示例通常没有像这样设置使用的包罗万象的端点的说明,甚至将 GET
分解成它自己的方法似乎也无济于事。
作为一个附加问题,如果我缺少某些 CORS 配置,是否有将其集成到 serverless.template
文件或其他一些自动部署步骤中的好方法?
这与您的 ANY
代理方法有关。如此处所述:http://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-cors.html
Note When applying the above instructions to the ANY method in a proxy integration, any applicable CORS headers will not be set. Instead, you rely on the integration back end to return the applicable CORS headers, such as Access-Control-Allow-Origin
所以你必须让你的后端 API return 合适的 CORS headers。
您的服务器需要 header 以及 api 网关。 看这个例子: - cors header 应用于静态桶网站
https://www.codeproject.com/Articles/1178781/Serverless-Architecture-using-Csharp-and-AWS-Amazo
要使 API 正常工作,必须完成两件事: 1. 必须正确设置选项方法——通常在 API 网关上使用模拟方法来完成。 2. 代码中的 HTTP 方法实现必须 return CORS header 正确。搜索一下,这方面的文章不少。
对我来说,问题是第 1 点;当我使用 .NET Core 开发 API-Gateway Lambda 集成时,使用 API 网关 'Enable CORS' 按钮对我不起作用。我也没有找到在 serverless.template 文件中添加创建选项方法的方法。
这是另一种方法;从 CLI 或 VisualStudio 发布 lambda 后,在 API 端点上触发 PUT 请求并传递包含选项方法 defs 的 swagger 定义,并确保设置查询参数 mode=merge。您可以使用 PostMan 来执行此操作。
或
您使用的 DotNet 实用程序执行与此处说明的相同的操作: http://sbytestream.pythonanywhere.com/blog/Enabling-APIGateway-CORS GitHub 上也提供了源代码。