【问题标题】:Request body is overwriting the HTTP method?请求正文覆盖 HTTP 方法?
【发布时间】:2016-08-04 13:46:53
【问题描述】:

目的:获取调用AWS-API网关上的资源(路由)的方法。

我的进度:我有一个端点,它具有 GET、PATCH、POST 方法,在集成请求步骤期间映射到模板。 PATCH 的模板如下所示:

"editJobsTemplate": {
     "application/json": {
     "method": "$context.httpMethod",
     "job": "$input.json('$.job')"
    }
 }

使用this document 创建。

问题:当 PATCH 正文为空时,我得到如下响应:

{
  "eventType": {
    "method": "PATCH",
    "job": ""
  }
}

但是当有一个以'job'作为key的对象在body中发送时......

{
  "job":"some text value"
}

然后响应看起来像:

{
  "eventType": {
     "job": "some text value"
  }
}

编辑 1

This 是 API Gateway 资源面板中模板的屏幕截图。

我在 Postman 上测试得到 this result

编辑 2 This 是显示 Content-Type 标头设置为 application/json,根据 b.b3rn4rd 的响应,this 显示我之后得到的响应。

【问题讨论】:

  • 第一个代码粘贴实际上是模板还是大摇大摆的摘录?您是否使用测试功能在控制台中对此进行了测试?
  • 我正在使用无服务器进行部署,所以我添加了屏幕截图来解决您的评论,第一个粘贴是模板。我还为邮递员的测试添加了截图。

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


【解决方案1】:

当您调用端点时,请确保您指定了适当的内容类型标头。在您的情况下,它可能是 Content-Type: application/json,否则,请求映射将被跳过,请求将按原样传递给 (lambda ?)。

另外,我已经可以发现"job": "$input.json('$.job')" 的另一个潜在问题,

应该是:

"job" : $util.escapeJavaScript($input.json('$.job')) 没有引号!

【讨论】:

  • 我已经添加了标题,我在编辑中添加了截图。我现在得到一个错误的字符串作为响应。我只是在运行测试以从请求中获取方法,因此没有使用 escapeJavaScript 实用程序,不过感谢您的提醒。
  • 我没有怀疑,开始使用网关时遇到了类似的问题:)
猜你喜欢
  • 2023-03-27
  • 2011-01-03
  • 2019-06-21
  • 1970-01-01
  • 1970-01-01
  • 2015-06-02
  • 1970-01-01
  • 2017-01-04
  • 1970-01-01
相关资源
最近更新 更多