如何在Azure APIM中按规则修改POST请求负载并转发至后端
Azure APIM 实现POST请求负载自定义格式化操作方案
你需要的负载修改规则可以通过APIM原生的入站处理策略中的set-body组件实现,不需要额外部署中间服务,直接在APIM侧完成文本转换。
具体配置步骤
- 登录Azure门户,进入目标APIM实例,在左侧菜单找到「API」选项,选中你需要配置的对应API或单个操作
- 点击「设计」选项卡,找到「入站处理」区块,点击「代码视图」进入策略编辑界面
- 在
<inbound>节点下添加如下set-body策略,替换原有请求体:
<policies> <inbound> <base /> <set-body>@{ // 读取原始请求负载 string rawPayload = context.Request.Body.As<string>(preserveContent: true); // 按行拆分原始内容 string[] lines = rawPayload.Split(new[] { "\r\n", "\n" }, StringSplitOptions.None); System.Text.StringBuilder processed = new System.Text.StringBuilder(); foreach (string line in lines) { // 先把当前行加入结果 processed.AppendLine(line); // 匹配newreq行,追加指定参数 if (line.Trim().Equals("newreq", StringComparison.OrdinalIgnoreCase)) { // 保留和newreq一致的缩进,示例默认适配4个空格的缩进,可按需调整 string indent = line.Substring(0, line.Length - line.TrimStart().Length); processed.AppendLine($"{indent}Content-Type: application/http"); processed.AppendLine($"{indent}Accept: application/json"); } // 匹配GET请求行,追加2个空行 if (line.Trim().StartsWith("GET ", StringComparison.OrdinalIgnoreCase)) { processed.AppendLine(); processed.AppendLine(); } } return processed.ToString(); }</set-body> </inbound> <backend> <base /> </backend> <outbound> <base /> </outbound> <on-error> <base /> </on-error> </policies>
配置说明
- 上述代码中的追加参数值、缩进规则都可以根据你实际的业务要求调整
- 如果需要避免误匹配普通文本中的newreq字样,可以调整判断逻辑,增加更严格的行匹配规则
- 配置完成后可以通过APIM自带的测试功能发起请求,在「跟踪」日志中查看转发到后端的请求体是否符合预期
内容的提问来源于stack exchange,提问作者Kirti Thakur - Patil
相关产品推荐
相关产品推荐

