Azure APIM:XML 转换使用多个 XML 响应到单个 XML 响应
Azure APIM: XML Transformation Using Multiple XML Responses to Single XML Response
注:我用的是天蓝色apim
我有两个 api 返回 xml 响应显示如下:
响应 1:
<A>
<B>10</B>
</A>
响应2:
<C>
<D>10</D>
</C>
我想转换 XML 响应以获得以下输出,其中响应 2 放在响应 1 中
输出:
<A>
<B>10</B>
<C>
<D>10</D>
</C>
</A>
设置入站策略来实现它。
我的想法是结合使用send-request
,set-variable
和return-response
,也就是先调用2个API,然后保存请求的具体值,然后组合成一个新的 Xml 文件。这是我的政策,我使用了 2 个 azure 函数来扮演 API 的角色:
<inbound>
<base />
<send-request mode="new" response-variable-name="reqone" timeout="20" ignore-error="true">
<set-url>https://xxx.azurewebsites.net/api/HttpTrigger1</set-url>
<set-method>GET</set-method>
</send-request>
<send-request mode="new" response-variable-name="reqtwo" timeout="20" ignore-error="true">
<set-url>https://xxxx.azurewebsites.net/api/HttpTrigger2</set-url>
<set-method>GET</set-method>
</send-request>
<set-variable name="valOne" value="@{
string text = ((IResponse)context.Variables["reqone"]).Body.As<XDocument>().Root.Value;
return text;
}" />
<set-variable name="valTwo" value="@{
string text = ((IResponse)context.Variables["reqtwo"]).Body.As<XDocument>().Root.Value;
return text;
}" />
<return-response>
<set-status code="200" />
<set-header name="Content-Type" exists-action="override">
<value>text/xml</value>
</set-header>
<set-body>@{
XDocument srcTree = new XDocument(
new XElement("A",
new XElement("B", context.Variables.GetValueOrDefault("valOne","")),
new XElement("C", new XElement("D", context.Variables.GetValueOrDefault("valTwo","")))
)
);
return srcTree.ToString();
}</set-body>
</return-response>
</inbound>
这是我的 api 回复:
这是我的测试结果:
注:我用的是天蓝色apim
我有两个 api 返回 xml 响应显示如下: 响应 1:
<A>
<B>10</B>
</A>
响应2:
<C>
<D>10</D>
</C>
我想转换 XML 响应以获得以下输出,其中响应 2 放在响应 1 中 输出:
<A>
<B>10</B>
<C>
<D>10</D>
</C>
</A>
设置入站策略来实现它。
我的想法是结合使用send-request
,set-variable
和return-response
,也就是先调用2个API,然后保存请求的具体值,然后组合成一个新的 Xml 文件。这是我的政策,我使用了 2 个 azure 函数来扮演 API 的角色:
<inbound>
<base />
<send-request mode="new" response-variable-name="reqone" timeout="20" ignore-error="true">
<set-url>https://xxx.azurewebsites.net/api/HttpTrigger1</set-url>
<set-method>GET</set-method>
</send-request>
<send-request mode="new" response-variable-name="reqtwo" timeout="20" ignore-error="true">
<set-url>https://xxxx.azurewebsites.net/api/HttpTrigger2</set-url>
<set-method>GET</set-method>
</send-request>
<set-variable name="valOne" value="@{
string text = ((IResponse)context.Variables["reqone"]).Body.As<XDocument>().Root.Value;
return text;
}" />
<set-variable name="valTwo" value="@{
string text = ((IResponse)context.Variables["reqtwo"]).Body.As<XDocument>().Root.Value;
return text;
}" />
<return-response>
<set-status code="200" />
<set-header name="Content-Type" exists-action="override">
<value>text/xml</value>
</set-header>
<set-body>@{
XDocument srcTree = new XDocument(
new XElement("A",
new XElement("B", context.Variables.GetValueOrDefault("valOne","")),
new XElement("C", new XElement("D", context.Variables.GetValueOrDefault("valTwo","")))
)
);
return srcTree.ToString();
}</set-body>
</return-response>
</inbound>
这是我的 api 回复:
这是我的测试结果: