You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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内置表达式函数,可将&amp;quot;还原为&quot;,正好匹配后端需要的格式
  • GetValueOrDefault("header-name", ""):安全获取请求头值,避免因头不存在抛出异常

效果验证

处理前的请求头值:

{&amp;quot;x&amp;quot;:[{&amp;quot;a&amp;quot;:&amp;quot;100&amp;quot;,&amp;quot;b&amp;quot;:&amp;quot;200&amp;quot;}]}

经过HtmlDecode处理后,输出为:

{&quot;x&quot;:[{&quot;a&quot;:&quot;100&quot;,&quot;b&quot;:&quot;200&quot;}]}

该格式与Postman发送的正确请求头完全一致,后端API可正常解析。

额外注意事项

  • 若存在多次转义的极端情况,可嵌套调用HtmlDecode,例如@HtmlDecode(HtmlDecode(...))
  • 可在APIM测试控制台模拟供应商的请求,验证策略是否生效
  • 确保策略添加在<inbound>区块的<base />之后,避免被基础策略覆盖

内容的提问来源于stack exchange,提问作者smm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 07:52:26