在 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 的通用方法吗? 或者我们可以相应地检查单行广告解析中的类型吗?
感谢@dbc的评论,开始时您可以将其解析为基类JToken,这将允许您处理JObject和JArray。
为了在 APIM 中实现这一点,请添加以下给定的策略来实现此特定要求。
<policies>
<outbound>
<base />
<set-variable name="parsedResponse" value="@(
context.Response.Body.As<JToken>(preserveContent: true) is JArray array
? new JObject(new JProperty("items", array))
: context.Response.Body.As<JObject>(preserveContent: true)
)" />
</outbound>
</policies>
您将分别获得以下针对 JObject 和 JArray 的响应。