我需要将json数据发布到受API密钥保护的AWS API网关。当我尝试在Postman中添加x-api-key标头并发出请求时,POST工作正常。但是,我想用Jquery代码做同样的事情。如何在JQuery中添加此x-api-key标头。这是我的代码,
var myJSON = JSON.stringify(obj);
$.ajax({
type: "POST",
url: "<aws-url>" ,
data: myJSON,
crossDomain : true,
dataType: 'json',
beforeSend: function(xhr){xhr.setRequestHeader("X-Api-Key","<value>");},
headers :{
'Content-Type':'application/x-www-form-urlencoded',
//'Authorization':'<value>'
},
success: function(result) {
console.log("ho gaya");
}
});
如您所见,我尝试在标题部分添加“授权”,“auth-key”,“AUTH-KEY”,“X-Api-Key”,“x-api-key”。我还在beforeSend部分添加了标题,但再次没有用。请帮忙。
答案 0 :(得分:1)
我花了太长时间才弄明白这一点,也许这是一个解决另一个问题的方法,但这个问题与我的问题最相似 - 有一个由网关访问的lambda函数,受x-api-key保护,我可以通过.NET提交POST请求,但在jquery / ajax中失败。
1)使用相同的ajax脚本,删除标题结构中的beforeSend和Content-Type键名和值。
2)按照aws程序启用CORS。确保将此应用于POST / GET功能而不是资源:
https://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-cors.html
3)在步骤5中,Allow-Access-Control-Headers应具有X-Api-Key,只需将其更改为小写。
从这些步骤开始,启用CORS似乎很重要,只要您使请求头密钥名一致,x-api-key的小写就不那么重要了。最后,在您已经在API网关控制台中创建使用计划和API密钥之后,应该完成整个过程。
$.ajax({
type: "POST",
url: <url>,
data: <myJSON>,
crossDomain: true,
dataType: 'json',
headers: {"x-api-key": <keyvalue>},
success: function(response) {
$('#output').html('Success');
},
error: function(response) {
$('#output').html('Failure');
},
});