Api Gateway 是不是允许没有请求正文的发布请求

Posted

技术标签:

【中文标题】Api Gateway 是不是允许没有请求正文的发布请求【英文标题】:Does Api Gateway allow post request without request bodyApi Gateway 是否允许没有请求正文的发布请求 【发布时间】:2021-02-12 01:27:37 【问题描述】:

我已经创建并指定了路径参数作为 id 并使用它从 db 中获取数据,然后使用 http 从数据库中发布数据。我正在使用 AWS ApiGateway 来管理此端点,但是,当我传递 id 并尝试在没有请求正文或一些随机有效请求正文的 api 网关上测试端点时,它显示:

"errors": [
        
          "title": "Error in API Gateway",
          "code": "DEFAULT_5XX"
        
      ]

它还在日志中显示以下内容:

Illegal character in path at index 101: http://example.local/orders/items/create/id

【问题讨论】:

由于我更改了网址,因此索引 101 没有意义。但它指向我作为 id 传递的路径参数 您可以发布与您的请求等效的 cURL 吗?如果使用 Postman,在右侧,在发送按钮下,有一个 code 按钮。另外,在 URL 中,您可以用 X 之类的字符替换您想隐藏的任何内容,而不是删除它,这样 101 才有意义? 并且允许 POST 没有正文。 curl --location --request POST 'xxxx-xxxxxgroup.abc.xxxxxxxxxxxxxx.com:443/xx/xxxxxxxxorders/…' 以上是 cURL。下面是我通过错误示例值传递的 URL:xxxxxxxxxx-appxxxxxxxx.env-xxxxxgroup.abc.xxxxxxxxxxxxxx.local/…id 【参考方案1】:

要回答您的问题,是的,我们可以在没有正文的情况下在 API Gateway 上进行 POST。错误很明显,它是路径中的非法字符。

关于这个有一个post on AWS FAQ。解决方案是在集成请求窗格中添加一个代理路径变量,这样它就不会对该路径的这个特定路径运行任何验证检查。

【讨论】:

谢谢。我没有在我的 cloudformation 文件中添加 method.request.path.id。添加相同的内容后它工作了

以上是关于Api Gateway 是不是允许没有请求正文的发布请求的主要内容,如果未能解决你的问题,请参考以下文章

创建请求正文和模板 API GATEWAY CDK

Kong API Gateway - 在自定义插件中读取请求正文

允许从 API Gateway 到私有 ALB 的请求

HTTP 请求正文未通过 AWS API Gateway 访问 AWS lambda 函数

如何允许 API Gateway 代理与 Cognito Authorizer 集成以进行 POST 请求?

AWS API Gateway - 如何在正文映射模板中获取日期/时间戳/纪元?