AWS Lambda函数API端点-403和415错误

时间:2019-01-02 19:02:55

标签: amazon-web-services aws-lambda aws-api-gateway

我有一个已设置的AWS Lambda函数,并试图从前端进行访问。它在浏览器中工作正常,并返回我期望的响应。当我尝试从localhost击中它时,我得到403。我尝试遵循概述的herehere的步骤(缺少一些评论者提到的整个API) ,无济于事。我进行了所有更改。启用CORS后,我不再得到403,而是得到415。由于Cloudwatch日志中没有任何内容,因此不确定下一步该怎么做。

更多细节:我正在使用Lambda:

enter image description here

我有一个GET方法(启用CORS后出现“选项”):

enter image description here

当我单击“启用CORS”时会发生以下情况:

enter image description here

因为它已在屏幕截图中删除,所以标题的完整列表如下:“ Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token”

这是我的方法响应: enter image description here

这是我在前端调用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)
    });
  }

这是我遇到的错误。在启用CORS之前,第一个错误是: enter image description here

在启用CORS之后: enter image description here

2 个答案:

答案 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)
  });
  
}