gpt4 book ai didi

azure - API 管理策略 - 通过 x-www-form-urlencoded 主体

转载 作者:行者123 更新时间:2023-12-03 02:34:30 25 4
gpt4 key购买 nike

我有一个旧的 asmx Web 服务,可以像这样使用 postman 调用

Postman

我想通过 API 管理将其公开为 JSON 端点,然后制定一个转换 XML 的策略,但我不确定如何在策略中设置请求详细信息

我尝试在下面执行此操作(及其变体),但我总是收到消息错误“requestXML 丢失”

<set-body template="liquid">
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soap:Body>
requestXml: "<Request Caller="Harness"><GetEmployerOfferings><EmployerCode>CHCA</EmployerCode></GetEmployerOfferings></Request>"
</soap:Body>
</soap:Envelope>
</set-body>
<set-header name="Content-Type" exists-action="override">
<value>application/x-www-form-urlencoded</value>
</set-header>

如何通过 APIM 策略将其传递到后端服务?

最佳答案

对于您的要求,正如我在评论中询问的那样,我对您的 json 示例有点困惑。不过我也可以提供一些信息供大家引用。

1. 如果您想测试将 requestXml 传递到后端的硬代码,正确的格式应该是 requestXml=xxxx但不是requestXml:xxxx因为您使用“x-www-form-urlencoded”作为内容类型(在 postman 中我们可以使用 requestXml:xxxx )。所以apim中的策略应该是:

<set-body>requestXml=<Request Caller="Harness"><GetEmployerOfferings><EmployerCode>CHCA</EmployerCode></GetEmployerOfferings></Request></set-body>

但是由于您的 body 包含 xml <> ,所以它将删除 <Request Caller="Harness"><GetEmployerOfferings><EmployerCode>CHCA</EmployerCode></GetEmployerOfferings></Request>保存策略后自动。只留下<set-body>requestXml=</set-body> ,所以用硬代码测试可能不会成功。

2. 据我了解,如果您想使用如下所示的 json 数据请求 APIM:

{
"getEmployerOfferings": {
"requestXml": "<Request Caller=\"Harness\"><GetEmployerOfferings><EmployerCode>CHCA</EmployerCode></GetEmployerOfferings></Request>"
}
}

如果您的请求json类似于上面的示例,您可以引用以下策略:

<inbound>
<base />
<set-body>@{
var request = context.Request.Body.As<JObject>();
var xmlstring = request["getEmployerOfferings"]["requestXml"].ToString();
var result = "requestXml=" + xmlstring;
return result;
}</set-body>
<set-header name="Content-Type" exists-action="override">
<value>application/x-www-form-urlencoded</value>
</set-header>
</inbound>

测试apim,运行后可以看到最终的请求体,显示: enter image description here

关于azure - API 管理策略 - 通过 x-www-form-urlencoded 主体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63720217/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com