AWS API Gateway 作为 SQS 的代理 - 数据到达时没有正号

Nei*_*ias 7 json amazon-sqs aws-api-gateway

我创建了一个 API 网关,用于接收 JSON 数据并将其发布到 SQS 队列。我的问题是:如果我用正信号(+)发布数据,例如,{“date”:“25 + 2”} 正信号将被空格替换,数据将像这样到达SQS队列:{ “日期”:“25 2”} .

不过,如果我通过 AWS 控制台发送相同的消息{"date": "25+2"},收到的消息将保持不变,并带有加号。

为什么?

我需要添加额外的配置吗?

我的API网关配置:

在此输入图像描述

我的帖子:

curl --location --request POST 'https://xxxxxxxx.execute-api.us-east-1.amazonaws.com/yyyy' \
--header 'Content-Type: application/json' \
--data-raw '{"data": "25+2"}'
Run Code Online (Sandbox Code Playgroud)

SQS队列中收到的数据:

在此输入图像描述

PS:当我通过 .NET C# 等应用程序收到此消息时,数据也到达时没有积极信号。

Nei*_*ias 10

经过朋友的帮助并仔细阅读AWS文档,我找到了解决方案。

www-form-urlencodedAWS SQS 队列期望以 JSON(或 XML)格式接收消息。

因此,针对问题的情况,我们有两种解决方案:

  1. 调用 API 时已发送编码消息。

  2. 或者...在API网关中配置模板,将body中收到的消息转换为格式application/x-www-form-urlencoded,使用$util.urlEncode函数,如下所示:

映射模板:

Action=SendMessage&MessageBody=$util.urlEncode($input.body)
Run Code Online (Sandbox Code Playgroud)