我正在使用AWS Visual Studio Toolkit开发一个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
打入其自己的方法似乎没有帮助。 / p>
作为一个额外的问题,如果我缺少一些CORS配置,是否有一种很好的方法可以将它集成到serverless.template
文件或其他一些自动部署步骤中?
答案 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上找到。