我有一个API代理,需要能够修改最终目标URL的路径组件。在整个代理有一个已定义的目标端点URL的情况下,这似乎相当简单,但我们使用的是TargetServers和VirtualHosts,它们显然是在TargetEndpoint PreFlow之后分配的
我在Target Endpoint PreFlow中有一个JS函数,当我尝试修改context.targetRequest.path时,得到了未指定的JS错误。在Proxy PreFlow期间尝试修改传入代理的路径部分也失败。
转储targetRequest的值会产生:
我能够“成功”修改的唯一变量是targetRequest.url来实现我的目标,但要做到这一点我必须分配整个事情,包括我不知道的协议和主机!< / p>
任何人都知道如何做到这一点?我本质上想修改替换“/?”的路径只是“?”
由于
答案 0 :(得分:1)
您还可以通过利用Path元素和TargetServer来设置目标端点:
<TargetEndpoint>
...
<HTTPTargetConnection>
<LoadBalancer>
<Server name="TargetServerABC"/>
</LoadBalancer>
<Path>/v1/YourPathHere/json.ws?{flow.company.queryparams}</Path>
</HTTPTargetConnection>
</TargetEndpoint>
注意TargetServerABC需要是使用以下these steps创建的TargetServer。
答案 1 :(得分:0)
操作target.path似乎存在问题(在Apigee中有一个错误报告打开)。
目前的解决方法是使用AssignVariable块在AssignMessage策略中重写整个URI:
<AssignVariable>
<Name>target.url</Name>
<Value>http://example.com/mypath?param=value&variable={apigee.variable}</Value>
<Ref/>
</AssignVariable>
或者您可以使用context.setVariable函数在Javascript中执行此操作:
context.setVariable("target.url", mycompleteurl);