如何在API管理入站策略中从Named Value解析JSON构造请求头
问题解答
翻译后的问题内容
我希望将JSON文档存储在名为Info的Named Value中,示例内容为:
{ "Info": "MyInfo" }
随后编写如下入站策略:
<inbound> <base /> <set-variable name="MyVar" value={{Info}}> <set-header name="MyHeader" exists-action="override"> <value>@{ string headerValue; // Parse the JSON in "MyVar" and use it set // "headerValue" to the string "MyInfo" return headerValue; }</value> </set-header> </inbound>
请问应替换上述策略中注释部分的代码是什么?我不清楚如何:
- 访问变量MyVar
- 解析其JSON值以提取字符串"MyInfo"的内容
解决方案
首先修正策略中的语法错误:<set-variable>标签缺少闭合符号,应改为:
<set-variable name="MyVar" value="{{Info}}" />
然后替换注释部分的代码,完成变量访问与JSON解析:
// 访问MyVar变量获取JSON字符串 string jsonContent = context.Variables.GetValueOrDefault<string>("MyVar"); // 解析JSON并提取Info字段的值 headerValue = Newtonsoft.Json.Linq.JObject.Parse(jsonContent)["Info"].ToString();
完整的<set-header>策略代码如下:
<set-header name="MyHeader" exists-action="override"> <value>@{ string headerValue; // 访问变量并解析JSON string jsonContent = context.Variables.GetValueOrDefault<string>("MyVar"); headerValue = Newtonsoft.Json.Linq.JObject.Parse(jsonContent)["Info"].ToString(); return headerValue; }</value> </set-header>
说明
- 访问APIM变量:使用
context.Variables.GetValueOrDefault<T>("变量名")方法,指定对应的数据类型即可获取变量值。 - 解析JSON:APIM默认集成了Newtonsoft.Json库,直接使用
JObject.Parse()解析JSON字符串,再通过键名提取目标值即可。
内容的提问来源于stack exchange,提问作者JoelFan
相关产品推荐
相关产品推荐

