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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 05:40:30