如何使用Azure APIM入站策略修正JSON请求头的编码问题?
解决Azure APIM处理双重转义请求头的问题
问题分析
供应商传来的请求头是双重HTML转义的结果——把原本应是"的部分再次转义成了",导致后端API无法解析为合法JSON。我们可以通过Azure APIM的入站策略,将双重转义的内容还原为符合要求的格式。
实现方案
使用APIM内置的HtmlDecode()函数,结合set-header策略完成修复:
完整入站策略代码
<policies> <inbound> <base /> <!-- 覆盖目标请求头:对原始值执行HTML解码后重新设置 --> <set-header name="header-name" exists-action="override"> <value>@HtmlDecode(context.Request.Headers.GetValueOrDefault("header-name", ""))</value> </set-header> </inbound> <backend> <base /> </backend> <outbound> <base /> </outbound> <on-error> <base /> </on-error> </policies>
关键逻辑说明
exists-action="override":确保直接替换原请求头的值,而非追加内容@HtmlDecode():APIM内置表达式函数,可将&quot;还原为",正好匹配后端需要的格式GetValueOrDefault("header-name", ""):安全获取请求头值,避免因头不存在抛出异常
效果验证
处理前的请求头值:
{&quot;x&quot;:[{&quot;a&quot;:&quot;100&quot;,&quot;b&quot;:&quot;200&quot;}]}
经过HtmlDecode处理后,输出为:
{"x":[{"a":"100","b":"200"}]}
该格式与Postman发送的正确请求头完全一致,后端API可正常解析。
额外注意事项
- 若存在多次转义的极端情况,可嵌套调用
HtmlDecode,例如@HtmlDecode(HtmlDecode(...)) - 可在APIM测试控制台模拟供应商的请求,验证策略是否生效
- 确保策略添加在
<inbound>区块的<base />之后,避免被基础策略覆盖
内容的提问来源于stack exchange,提问作者smm
相关产品推荐
相关产品推荐

