我有一个 JSON 数组响应,返回类似于以下内容的值:
[
{
"code": "SCH",
"title": "School Email",
"emailType": "school",
"id": "123455"
},
{
"code": "PER",
"title": "Personal Email",
"emailType": "personal",
"id": "123456"
}
]
在我的 APIM 策略中,我想匹配传入的代码,例如“PER”并将相应的id结果存储在缓存中。 我尝试了以下策略的许多变体来提取单个值:
<set-variable name="emailId"
value="@{var emailTypes = JArray.Parse(context.Variables["emailTypesList"].ToString());
var emailId = emailTypes.FirstOrDefault(x => x["code"].Value<string>() == "PER");
return emailId?["id"]?.ToString();
}"/>
但我无法正确获取语法,并收到“第 25 行第 18 列元素“set-variable”中的错误:表达式中不支持使用“System.Object”类型的成员“”。 谁能为我提供一种方法来做到这一点? 因为我使用的是 JArray(对象),所以可能还是不可能?
我读到策略中只有某些变量类型可用,但似乎可以在 C# 代码块中使用对象(或者这不正确)?
任何提示表示赞赏,提前致谢
如果您想从 JSON 数组响应中获取
id
== "PER" 的 code
,请使用以下代码:
<set-variable name="emailId" value="@{
var jsonArray = JArray.Parse(context.Response.Body.As<string>());
var id = jsonArray.FirstOrDefault(x => x["code"].ToString() == "PER")?["id"].ToString();
return id;
}" />