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
相关产品推荐
相关产品推荐

