6

POST许多服务可以在发出请求时接受 URL 中的查询字符串参数Content-Type: application/x-www-form-urlencoded以及正文中的其他参数,但似乎 AWS API Gateway 不能同时接受查询字符串参数。

当我使用POST映射模板调用 AWS API Gatewayapplication/x-www-form-urlencoded并查询字符串 URL 参数(使用 Lambda 函数)时,我收到以下错误:

{
  "message":"When Content-Type:application/x-www-form-urlencoded,
    URL cannot include query-string parameters (after '?'):
    '/prod/webhook?inputType=wootric&outputType=glip&url=...'"
}

这是一个示例 cURL:

curl -XPOST 'https://{myid}.execute-api.{myregion}.amazonaws.com/prod/webhook? \
inputType=wootric&outputType=glip&url=https://hooks.glip.com/webhook/ \
11112222-3333-4444-5555-666677778888' \
-d "@docs/handlers/wootric/event-example_response-created.txt" \
-H 'Content-Type: application/x-www-form-urlencoded' -v

具体目标是使用带有查询字符串参数的 URL 将 Wootric webhook 事件发布到 Lambda 函数。

您可以在此处获取代码:

https://github.com/grokify/chathooks

Wootric 事件正文文件在这里:

https://raw.githubusercontent.com/grokify/chathooks/master/docs/handlers/wootric/event-example_response-created.txt

GitHub问题在这里:

https://github.com/grokify/chathooks/issues/15

错误消息似乎很明确,但我想问:

  1. 是否有解决方法来配置 API 网关以支持两者?
  2. AWS 不支持这一点是否有基于标准的原因,或者这只是一个设计决策/限制?

如果没有解决方案,除了部署像 Heroku 这样的托管服务器解决方案之外,是否还有一个很好的轻量级解决方案。此外,其他云服务是否通过其 API 网关 + 云功能支持此功能,例如 Google?

显示对两者的支持的一些示例:

4

3 回答 3

1

是的,有一个解决方法,关键问题是设置将字符串转换为 json 的映射模板。API Gateway中显示的任何内容类型的非常详细的示例 。

于 2020-03-24T06:32:08.630 回答
0

请将您的 HttpURLConnection 的请求属性设置为“Content-Type”、“application/json”,如下所示 connection.setRequestProperty("Content-Type", "application/json");

于 2021-08-23T13:29:31.977 回答
0

我遇到了类似的问题,第 3 方提供商使用网络挂钩。事实证明,我的提供商正在将 url 路径从 转换UPPERCASELOWERCASE. apigateway.com/dev/0bscur3dpathRANDOM例如端点应该是apigateway.com/dev/0bscur3dpathRANDOM. 你明白了。

于 2021-10-21T11:53:14.173 回答