我有一个已设置的AWS Lambda函数,并试图从前端进行访问。它在浏览器中工作正常,并返回我期望的响应。当我尝试从localhost
击中它时,我得到403。我尝试遵循概述的here和here的步骤(缺少一些评论者提到的整个API) ,无济于事。我进行了所有更改。启用CORS后,我不再得到403,而是得到415。由于Cloudwatch日志中没有任何内容,因此不确定下一步该怎么做。
更多细节:我正在使用Lambda:
我有一个GET方法(启用CORS后出现“选项”):
当我单击“启用CORS”时会发生以下情况:
因为它已在屏幕截图中删除,所以标题的完整列表如下:“ Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token”
这是我在前端调用lambda的方式:
sendVerificationCode() {
let data = {
paramOne: x,
paramTwo: 'string',
paramThree: 'string'
}
return this.get('ajax').request('https://something.execute-api.us-east-1.amazonaws.com/beta/', {
host: 'https://something.execute-api.us-east-1.amazonaws.com',
method: 'GET',
data: data
}).then((response) => {
console.log('response', response)
});
}
答案 0 :(得分:1)
CORS对API Gateway有点挑剔,您是否尝试过在根和方法上同时启用它?以前对我有用。您也可以尝试为您的api网关项目下载javascript SDK,并使用它来查找路由,因为它会为您设置所有正确的设置。
答案 1 :(得分:0)
因此最终弄清楚了这一点。我在前端发出的请求的Content-Type
不是Application/JSON
,但是我的集成请求映射模板是。我通过在前端的请求中添加以下内容来解决此问题:
sendVerificationCode() {
let data = {
paramOne: x,
paramTwo: 'string',
paramThree: 'string'
}
return this.get('ajax').request(
'https://something.execute-api.us-east-1.amazonaws.com/beta/',
{
host: 'https://something.execute-api.us-east-1.amazonaws.com',
method: 'GET',
data: data,
contentType: 'application/json; charset=utf-8',
}
).then((response) => {
console.log('response', response)
});
}