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

Azure APIM set-body策略返回Byte数据致JSON解析失败排查

问题分析与解决方案

错误根源

报错里的0x0A是换行符,说明构造的请求体JSON中存在未转义的换行字符,导致后端System.Text.Json无法正确解析为FooBarModel。同时你的APIM策略存在语法和结构错误,进一步引发了这个问题。

策略修正要点

  1. 移除Liquid模板冲突:原策略中set-body同时混用template="liquid"和C#代码,两种方式不能共存,改用纯C#代码块生成请求体。
  2. 修复JSON构造语法:原C#代码里的匿名对象初始化存在语法错误(嵌套结构缺少键名),改用JObject+JProperty的方式构建合法的JSON结构。
  3. 强制JSON转义:使用JObject.ToString(Formatting.None)序列化,确保所有特殊字符(如换行、引号)被正确转义,避免后端解析报错。
  4. 修正策略嵌套结构:原策略中set-header被嵌套在set-body内部,不符合APIM策略的XML结构规范,需改为独立的策略节点。

修正后的完整策略

<policies>
    <inbound>
        <base />
        <choose>
            <when condition="@(context.Request.Headers.GetValueOrDefault("Authorization","").AsJwt()?.Claims.GetValueOrDefault("key", "") == "AuthTokenValue")">
                <set-backend-service backend-id="BackendId" />
                <set-body>@{
                    JObject body = context.Request.Body.As<JObject>();
                    var newBody = new JObject(
                        new JProperty("key1", body["key1"]),
                        new JProperty("key2", body["key2"]),
                        new JProperty("nestedKey", new JObject(
                            new JProperty("key3", body["key3"]),
                            new JProperty("key4", body["key4"])
                        ))
                    );
                    return newBody.ToString(Newtonsoft.Json.Formatting.None);
                }</set-body>
                <set-header name="Content-Type" exists-action="override">
                    <value>application/json</value>
                </set-header>
                <rewrite-uri template="/api/v1/end/{value}/point" />
            </when>
            <otherwise />
        </choose>
    </inbound>
    <backend>
        <base />
    </backend>
    <outbound>
        <base />
    </outbound>
    <on-error>
        <base />
    </on-error>
</policies>

额外排查建议

  • 验证原始请求体:通过APIM测试控制台或日志,检查传入的原始请求体是否本身包含未转义的特殊字符。
  • 匹配DTO结构:确保新构造的JSON字段名、嵌套结构与后端FooBarModel完全一致,避免因结构不匹配导致解析失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 18:55:00