Azure APIM 策略中的 Newtonsoft.Json 转换

问题描述 投票:0回答:1

在 Azure APIM 策略中 - 响应可以作为 Json 对象 Json 数组返回 - 但也可以是其中之一,并且这两种情况都需要处理。

这仅在响应是 Json 对象时才有效:

response = context.Response.Body.As<JObject>(preserveContent: true);

但是对于以 Json 数组形式传入的其他响应将会失败:

[
  {
    "index": 0,
    "value": 999
  },
  {
    "index": 2,
    "value": 273
  },
  {
    "index": 1,
    "value": 424
  }
]

这是一种可以处理这两种情况并将其转换为 JObject 的通用方法吗? 或者我们可以相应地检查单行广告解析中的类型吗?

json.net azure-api-management
1个回答
0
投票

感谢@dbc的评论,开始时您可以将其解析为基类JToken,这将允许您处理JObjectJArray

为了在 APIM 中实现这一点,请添加以下给定的策略来实现此特定要求。

<policies>
    <outbound>
        <base />
        <set-variable name="parsedResponse" value="@( 
            context.Response.Body.As<JToken>(preserveContent: true) is JArray array 
            ? new JObject(new JProperty(&quot;items&quot;, array)) 
            : context.Response.Body.As<JObject>(preserveContent: true)
        )" />
    </outbound>
</policies>

您将分别获得以下针对 JObject 和 JArray 的响应。

enter image description here

enter image description here enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.