Azure API管理-动态URL问题



我有一个前端url,比如"https:\test.helloweb.com\account",它被定义为后请求/person,我想将该url上的任何请求定向到后端url,如下所示"https:\secure.hiddenapi\vi\api\pperson".

上面的场景很简单,现在也能工作——我被卡住的地方是如果有的请求

Say-

  1. /person/<id>/membership
  2. /person/<id>/membership/<memid>
  3. /person/<id>/accountdetails/

这些请求需要直接发送到

  1. https:\secure.hiddenapiviapiperson<id>membership
  2. https:\secure.hiddenapiviapiperson<id>membership<memid>
  3. https:\secure.hiddenapiviapiperson<id>accountdetails.

我尝试将操作定义为/person/*,然后如果我向/person/<id>/membership发出请求,则调用的后端url是不带id的https:\secure.hiddenapiviapipersonmembership

这似乎是一个简单的问题,但无法取得任何进展!

以下是APIM如何映射URL。考虑:
  1. API具有:
    • API URL后缀设置为";myapi">
    • Web服务URL设置为";https://contoso.com/api">
  2. 操作:
    • 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>

最新更新