我有一个前端url,比如"https:\test.helloweb.com\account",它被定义为后请求/person
,我想将该url上的任何请求定向到后端url,如下所示"https:\secure.hiddenapi\vi\api\pperson".
上面的场景很简单,现在也能工作——我被卡住的地方是如果有的请求
Say-
/person/<id>/membership
/person/<id>/membership/<memid>
/person/<id>/accountdetails/
这些请求需要直接发送到
https:\secure.hiddenapiviapiperson<id>membership
https:\secure.hiddenapiviapiperson<id>membership<memid>
https:\secure.hiddenapiviapiperson<id>accountdetails.
我尝试将操作定义为/person/*,然后如果我向/person/<id>/membership
发出请求,则调用的后端url是不带id的https:\secure.hiddenapiviapipersonmembership
。
这似乎是一个简单的问题,但无法取得任何进展!
- API具有:
- API URL后缀设置为";myapi">
- Web服务URL设置为";https://contoso.com/api">
- 操作:
- URL模板:"近视
当APIM收到请求时,它会将其分为两部分:
https://service.azure-api.net/myapi/myoperation
^ ^
API base URL operation path
然后它将API基URL替换为;Web服务URL";为匹配的API指定,这将成为对后端的请求:
https://contoso.com/api/myoperation
在你的情况下,考虑到你最终得到了";人/人";很可能你有";人;在Web服务URL和操作URL模板中。所以你有两个选择。
第一个选项是将Web服务URL配置为";https://secure.hiddenapi/vi/api"并让您的所有操作模板以"/人";。
另一种方式是将服务URL设置为"URL";https://secure.hiddenapi/vi/api/person"并且不包括"/人;到您的操作URL模板中。如果操作URL模板以一个像";{id}/成员资格/{memid}";。
在APIM中将整个后端API拆分为不同的API以进行控制和管理是一种很好的做法。所以就我个人而言,我更喜欢第一个选项,如果以后需要向后端发出前缀不同于"的请求/人;我会创建另一个API。
尝试使用重写URL策略来路由到不同的后端URL进行如下特定操作:
<inbound>
<base />
<rewrite-uri template="/accountdetails/" />
</inbound>