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

Azure APIM问题:Liquid模板无法访问JSON请求体中的值

Azure APIM Liquid模板返回空值的解决方案

你的问题核心是Azure APIM默认将请求体body作为原始字符串处理,而非解析后的JSON对象,直接用点语法访问属性会找不到对应值,导致返回空。下面是两种可行的修复方案:

方案一:在Liquid模板中直接解析JSON字符串

修改set-body里的Liquid代码,使用parse_json过滤器将原始body字符串转为JSON对象后再访问属性:

{
   "orderId" : "{{parse_json(body).GetOrderDetailsResponse.OrderId}}",
   "orderDate" : "{{parse_json(body).GetOrderDetailsResponse.OrderDate | Date: "dd/MM/yyyy"}}",
   "orderLines" : [
   {% JSONArrayFor orderline in parse_json(body).GetOrderDetailsResponse.OrderLines.OrderLine %}
      {
         "product" : "{{orderline.Product}}",
         "amount" : "{{orderline.Amount}}"
      }
   {% endJSONArrayFor %}
   ]
}

方案二:提前解析请求体为变量(更高效)

在return-response策略前添加set-variable,将请求体预解析为JSON对象,后续Liquid模板直接引用变量:

<inbound>
    <base />
    <!-- 解析请求体为JSON变量,true表示读取后保留原始请求体 -->
    <set-variable name="requestBody" value="@(context.Request.Body.As<Newtonsoft.Json.Linq.JObject>(true))" />
    <return-response response-variable-name="existing response variable">
        <set-status code="200" reason="OK" />
        <set-header name="Content-Type" exists-action="override">
            <value>application/json</value>
        </set-header>
        <set-body template="liquid">
{
   "orderId" : "{{variables.requestBody.GetOrderDetailsResponse.OrderId}}",
   "orderDate" : "{{variables.requestBody.GetOrderDetailsResponse.OrderDate | Date: "dd/MM/yyyy"}}",
   "orderLines" : [
   {% JSONArrayFor orderline in variables.requestBody.GetOrderDetailsResponse.OrderLines.OrderLine %}
      {
         "product" : "{{orderline.Product}}",
         "amount" : "{{orderline.Amount}}"
      }
   {% endJSONArrayFor %}
   ]
}
        </set-body>
    </return-response>
</inbound>

额外注意事项

  • 确保请求的Content-Type头为application/json,这是APIM处理JSON请求的前提
  • 方案二中的As<JObject>(true)参数true必须保留,否则请求体被读取后会被清空,后续策略无法访问

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 13:40:09