Azure APIM政策中JSON数组解析及格式转换求助
Azure APIM政策调整方案
需求
- API接收单元素JSON数组作为输入,需返回移除外层方括号的单个JSON对象
- 移除政策中无用的"song"引用,保留原有事件处理逻辑
修改后的完整政策代码
<policies> <inbound> <base /> <set-variable value="@(context.Request.Headers["Aeg-Event-Type"].Contains("SubscriptionValidation"))" name="isEventGridSubscriptionValidation" /> <set-variable value="@(context.Request.Headers["Aeg-Event-Type"].Contains("Notification"))" name="isEventGridNotification" /> <choose> <when condition="@(context.Variables.GetValueOrDefault<bool>("isEventGridSubscriptionValidation"))"> <return-response> <set-status code="200" reason="OK" /> <set-body>@{ var events = context.Request.Body.As<string>(); JArray a = JArray.Parse(events); var eventGridData = a.First["data"]; var validationCode = eventGridData["validationCode"]; var jOutput = new JObject( new JProperty("validationResponse", validationCode) ); return jOutput.ToString(); }</set-body> </return-response> </when> <when condition="@(context.Variables.GetValueOrDefault<bool>("isEventGridNotification"))"> <send-one-way-request mode="new"> <set-url>https://hooks.slack.com/services/mySlackHandle</set-url> <set-method>POST</set-method> <set-body>@{ var events = context.Request.Body.As<string>(); JArray a = JArray.Parse(events); return new JObject( new JProperty("text", $"事件通知: {a.First.ToString()}") ).ToString(); }</set-body> </send-one-way-request> <return-response> <set-status code="200" reason="OK" /> <set-body>@{ var events = context.Request.Body.As<string>(); JArray a = JArray.Parse(events); return a.First.ToString(); }</set-body> </return-response> </when> </choose> </inbound> <backend> <base /> </backend> <outbound> <base /> </outbound> <on-error> <base /> </on-error> </policies>
关键调整说明
- 移除"song"引用:删除原代码中无效的
song变量声明及引用,直接使用事件对象构造Slack消息,避免无意义的字段访问 - 数组转单个对象:在Notification分支的返回逻辑中新增
set-body,解析输入数组后取第一个元素直接返回,实现外层方括号的移除 - 保留原有逻辑:订阅验证分支完全保留;Slack消息推送逻辑正常运行,仅优化了消息内容的构造方式
内容的提问来源于stack exchange,提问作者James De Luca
相关产品推荐
相关产品推荐

