Azure Function Proxies同名多查询参数传递问题咨询
我之前也踩过这个坑!Azure Function Proxies默认的查询字符串映射逻辑确实不会自动处理多值同名参数——你当前的配置只会传递单个customerId值(通常是第一个),而不是完整的多参数列表。
问题根源
你的现有配置:
"requestOverrides": { "backend.request.querystring.customerId": "request.querystring.customerId" }
这里的request.querystring.customerId实际上是一个数组(当有多个同名参数时),但Proxies默认会把它转成逗号分隔的字符串(比如1,2,3),或者直接取第一个元素,这显然不符合后端的需求。
解决方案:使用表达式拼接多值参数
Azure Function Proxies支持使用内置表达式来处理数组类型的查询参数,核心是用@join()函数来拼接多值参数,还原原始的customerId=1&customerId=2格式。
方案1:传递所有查询参数(推荐)
如果你想把前端请求的所有查询参数(包括多值的customerId)原样传递到后端,可以直接覆盖整个查询字符串:
"matchCondition": { "methods": [ "GET" ], "route": "api/transactions" }, "backendUri": "https://anotherdomain/api/transactions", "requestOverrides": { "backend.request.querystring": "@join(request.querystring, '&')" }
@join(request.querystring, '&')会自动遍历所有查询参数,包括多值的键,将它们拼接成符合HTTP规范的查询字符串。
方案2:仅传递customerId多值参数
如果只需要传递customerId,其他参数忽略,可以这样配置:
"matchCondition": { "methods": [ "GET" ], "route": "api/transactions" }, "backendUri": "https://anotherdomain/api/transactions", "requestOverrides": { "backend.request.querystring": "@concat('customerId=', join(request.querystring.customerId, '&customerId='))" }
这个表达式会把customerId数组[1,2,3]拼接成customerId=1&customerId=2&customerId=3,完全符合你的需求。
验证方法
测试请求domain.com/api/transactions?customerId=1&customerId=2&customerId=3,通过代理后,后端收到的请求查询字符串会和前端一致,不会丢失任何customerId参数。
内容的提问来源于stack exchange,提问作者Navy

