如何阻止API Gateway/Lambda重写请求参数?
解决API Gateway/Lambda合并重复Query参数的问题
这种把多值Query参数合并成逗号分隔字符串的行为是API Gateway的默认操作,要阻止它分两种场景处理:
API Gateway端配置
1. REST API 操作步骤
- 打开API Gateway控制台,找到你的目标API和对应的资源(比如
/foo) - 选中该资源绑定的方法(GET/POST等),进入集成请求页面
- 在URL查询字符串参数区域,手动添加参数
a,同时勾选将查询字符串参数转发到集成 - 做完这步,API Gateway就会保留原始的多值参数格式,不会再把
a=1&a=2&a=3合并成a=1,2,3
2. HTTP API 检查点
HTTP API默认是保留多值Query参数的,如果还是出现合并情况,检查路由配置:
- 进入HTTP API的路由设置页,找到对应路由
- 确认路由的查询字符串参数配置里没有开启自动合并的选项(通常默认不开启,要是有自定义配置就调回来)
Lambda函数端处理
如果API Gateway已经正确转发了多值参数,但Lambda里还是拿到合并后的字符串,别用queryStringParameters,直接读multiValueQueryStringParameters字段:
# Python示例 def lambda_handler(event, context): # 获取参数a的所有值,返回列表格式 a_values = event.get('multiValueQueryStringParameters', {}).get('a', []) # 这里写你的业务逻辑 return { 'statusCode': 200, 'body': str(a_values) }
- 划重点:
queryStringParameters会自动合并多值参数成逗号串,multiValueQueryStringParameters才会以列表形式返回所有参数值
额外提醒
- 要是用了API Gateway的映射模板,别用
$input.params('a')(只返回第一个值),改用$input.params().get('a')或者$input.params('a[]')来获取所有值的列表 - 别在集成请求里加自定义URL重写规则,容易不小心把参数合并了
内容的提问来源于stack exchange,提问作者Gundon
相关产品推荐
相关产品推荐

