通过API网关为无服务器架构设置CORS模型代理端点

时间:2017-01-31 01:51:50

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

我正在使用AWS Visual Studio Toolkit开发一个C#/ .Net无服务器应用程序,而且在找出CORS配置中缺少的内容方面我遇到了一些麻烦。我的项目基于工具包中包含的ASP.Net示例,它将API网关配置为具有单个API端点,作为ASP.Net Web API框架的代理。

enter image description here

在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 ......

enter image description here

但是我遇到了一些错误,问题仍然存在。

enter image description here

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

那我在这里错过了什么?在线设置CORS的例子通常都有像这样设置使用的全能端点的说明,甚至将GET打入其自己的方法似乎没有帮助。 / p>

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

3 个答案:

答案 0 :(得分:4)

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

  

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

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

答案 1 :(得分:0)

您需要在服务器和api网关上设置标头。 请参阅此示例: - cors标头应用于静态存储桶网站

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

答案 2 :(得分:0)

要使API正常工作,必须完成两件事: 1.必须正确设置选项方法 - 通常在API网关上使用模拟方法完成。 2.代码中的HTTP方法实现必须正确返回CORS头。如果你搜索,有很多关于这个的文章。

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

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

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