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

Azure API Management策略:条件语句转换请求体报错排查

Azure API Management 请求体转换问题修正

问题场景

在Azure API Management中使用C#语法的策略转换请求体,需求如下:

  • 当请求体中dependentee_relationship_primary的值不为字符串"null"时,将其设为转换后请求体的relationship_type
  • 若dependentee_relationship_primary的值为"null",则使用dependentee_relationship_secondary的值
  • 同时将其他字段重组为指定结构

原代码的错误点

原策略代码存在以下问题导致报错:

  • 拼写错误:多处变量名和字段名拼写错误,比如dependetee(应为dependentee)、dependtee_name(应为dependentee_name)、depdentee_last_name(应为dependentee_last_name)、adultrelationship(应为dependentee_relationship_secondary)
  • 对象赋值错误:处理insurer_info时,错误地将字段值赋给了dependentee对象,而非insurer_info对象
  • 条件逻辑错误:原判断仅检查字段是否存在(!=null),但实际需求是判断字段值是否为字符串"null"
  • 字段名不匹配:预期结果中dependentee_info下的字段是last_name,但原代码写的是lastName

修正后的完整策略代码

<policies>
    <inbound>
        <base />
        <return-response>
            <set-status code="200" reason="ok" />
            <set-header name="Content-Type" exists-action="override">
                <value>application/json</value>
            </set-header>
            <set-body>@{
                var body = context.Request.Body.As<JObject>(true);

                var transformedBody = new JObject();
                transformedBody["extra_info"] = body["extra_info"];
                
                // 处理dependentee_info结构
                var dependentee = new JObject();
                dependentee["name"] = body["dependentee_name"];
                dependentee["last_name"] = body["dependentee_last_name"];
                transformedBody["dependentee_info"] = dependentee;

                // 处理insurer_info结构
                var insurerInfo = new JObject();
                insurerInfo["i_name"] = body["insurer_name"];
                insurerInfo["i_last_name"] = body["insurer_last_name"];
                transformedBody["insurer_info"] = insurerInfo;
        
                // 处理relationship_type的条件逻辑
                string primaryRel = body["dependentee_relationship_primary"]?.ToString() ?? "null";
                if (!string.Equals(primaryRel, "null", StringComparison.OrdinalIgnoreCase))
                {
                    transformedBody["relationship_type"] = primaryRel;
                } 
                else
                {
                    string secondaryRel = body["dependentee_relationship_secondary"]?.ToString() ?? "null";
                    transformedBody["relationship_type"] = secondaryRel;
                }

                return transformedBody.ToString();               
            }</set-body>
        </return-response>
    </inbound>
    <backend>
        <base />
    </backend>
    <outbound>
        <base />
    </outbound>
    <on-error>
        <base />
    </on-error>
</policies>

修正说明

  • 修正所有拼写错误,确保变量名、字段名和请求体中的命名完全一致
  • 调整insurer_info的赋值逻辑,将字段值正确绑定到对应的对象上
  • 重构条件判断逻辑:先将字段值转为字符串,明确判断是否等于"null",匹配需求场景
  • 将dependentee_info下的lastName改为last_name,和预期结果结构对齐
  • 增加空值兜底处理,使用?.ToString() ?? "null"避免字段不存在时出现空引用异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 21:10:47