我创建了一个AWS API GATEWAY,然后按照aws doc totur步骤创建api并启用CROS和Deploy!
Enable CORS
✔创建OPTIONS方法
✔将空响应模型的200方法响应添加到OPTIONS方法
✔将Mock Integration添加到OPTIONS方法
✔向OPTIONS方法添加200个积分响应
✔向OPTIONS方法添加Access-Control-Allow-Headers,Access-Control-Allow-Methods,Access-Control-Allow-Origin方法响应标头
✔添加Access-Control-Allow-Headers,Access-Control-Allow-Methods,Access-Control-Allow-Origin集成响应头部映射到OPTIONS方法
✔向POST方法添加Access-Control-Allow-Origin方法响应标头
✔将Access-Control-Allow-Origin集成响应头映射添加到POST方法
您的资源已配置为CORS。如果您在上面的结果输出中看到任何错误,请检查错误消息,如有必要,尝试通过方法编辑器手动执行失败的步骤。
使用此API时收到错误消息:
XMLHttpRequest无法加载https://xxxxxxx.amazonaws.com/xxxx/xxxx。 No' Access-Control-Allow-Origin'标头出现在请求的资源上。起源' http://localhost:7076'因此不允许访问。响应的HTTP状态代码为400。
我应该采取什么步骤?
答案 0 :(得分:1)
最后我发现我的错误发生了什么! 从AJAX发送到API网关的有效负载不是JSON格式,但LAMBDA的输入仅支持JSON格式的数据,这会导致LAMBDA无法正常处理输入。这反过来又导致LAMBDA的操作失误。
当发生这种情况时,API GATEWAY将不会收到正常的响应,因此它不会返回“访问控制 - 允许 - 来源”#39;到客户端(AJAX),所以没有HTTP错误的头。
使用JSON.stringify()函数处理完有效负载后,此问题得以解决。
答案 1 :(得分:0)
我最近遇到了类似的问题并假设您已经部署了您的API:
再次假设您正在使用jQuery之类的js客户端,您可能会想到一些POST / GET参数:
$.ajax({
crossDomain : true,
contentType : 'application/json',
method : "GET",
url : YOUR_API_GATEWAY_URL,
dataType : "json"
}).done(...)
$.ajax({
data : JSON.stringify({
param1 : val1,
param2 : val2,
...
}),
crossDomain : true,
contentType : 'application/json',
method : "POST",
url : YOUR_API_GATEWAY_URL,
dataType : "json"
}).done(...)