我在http://my_internal_api.com
上运行了一个API,我在https://mywso2:8280/my_api
上用WSO2公开了它。
一切正常,但REST API在json中发布了为原始服务器URL格式化的url属性。
实施例: 检索联系信息时,我得到一个JSON对象:
[{contact_id: 1, url: contact_url}, {}]
此contact_url
的格式为:http://my_internal_api.com/contacts/1
应该是:https://mywso2:8280/my_api/contacts/1
有没有办法解决这个问题?我猜测应该使用一个序列,但我不知道这是正确的方法还是我试图重新发明轮子。
答案 0 :(得分:0)
您可以使用中介扩展[1]添加输出序列。找到所有出现的" my_internal_api.com"并替换为" mywso2:8280"。要替换有效负载中的字符串,可以使用脚本调解器。
<script language="js">
var payload = mc.getPayloadXML().toString();
<property name="PAYLOAD" value="payload"/>
var changedPayload = payload.replace(/http:\/\/my_internal_api.com/, mc.getProperty('apiURL'));
var xml = new XML(newPayLoad);
mc.setPayloadXML(xml);</script>
1。https://docs.wso2.com/display/AM180/Adding+Mediation+Extensions
答案 1 :(得分:0)
最简单的方法是使用标头介体添加X-Forwarded-Host标头,如下所示:
<sequence name="WSO2AM--Ext--In">
<header name="X-Forwarded-Host"
scope="transport"
expression="get-property('transport','Host')"/>
<header name="X-Forwarded-Proto" scope="transport" value="https"/>
</sequence>
这样,大多数API都能够正确解析主机