Azure Api Management добавить параметр пути - PullRequest
0 голосов
/ 18 марта 2020

Я создаю мультитенантное приложение. Мы не используем Azure Active directory. Мы используем приложения logi c в качестве внутренних сервисов. Поскольку каждый URL-адрес API имеет владельца параметра, мы хотели включить его на уровне управления API.

https://apm-eso-01.azure-api.net/ {tenant} / v1 / {siteid} / inventoryItems

Есть ли возможность добавить параметр пути к URL-адресу хоста на уровне управления API, а не включать его в приложение logi c в качестве относительного пути.

URL-адреса внутреннего интерфейса. У нас есть разные экземпляры / серверы для каждого арендатора

Tenant1:
https://esous-devpd1.host.com/retail/data/esosm/api/v1-beta2/get/1

Tenant2:

https://esospanish-devpd1.host.com/retail/data/esosm/api/v1-beta2/get/1

URL-адреса APIM

https://apm-eso-host-sbx-01.azure-api.net/lse/ {tenant} / esosm / api / v1 / get / 1

Для поддержки местозаполнитель для арендатора в URL / конечных точках APIM, я должен добавить местозаполнитель арендатора или параметр пути к внутреннему URL, как показано ниже.

https://esous-devpd1.host.com/retail/data/esosm/ {tennant} / api / v1- beta2 / get / 1

Но все мои URL должны иметь арендатора в качестве параметра пути.

Так что мой вопрос можем ли мы добавить заполнитель арендатора или параметр пути к конечной точке APIM и просто переписать URL-адрес внутреннего сервера как таковой, чтобы включить параметр клиента, а не добавлять его в URL-адрес внутреннего интерфейса

1 Ответ

0 голосов
/ 19 марта 2020

Этого можно добиться, убедившись, что все шаблоны URL операций в APIM начинаются с / {tenant} /. Затем вы можете добавить политику на глобальном уровне или уровне API, чтобы выполнить преобразование:

<rewrite-uri template="@{
  var operationPath = context.Operation.UrlTemplate.TrimStart('/').Replace("{*", "{");
  var result = operationPath.Substring(operationPath.IndexOf('/'));
  return ("/retail/data" + result).Replace("/v1/", "/v1-beta2/");
}" />

Эта политика перезапишет URI текущего запроса, удалив первый сегмент из шаблона URI. Поэтому, если APIM получает запрос на операцию /{tenant}/xxx, он переписывает его на /xxx.

И затем вы можете добавить арендатора в качестве параметра запроса с помощью:

<set-query-parameter name="tenant" exists-action="override">
    <value>@(context.Request.MatchedParameters["tenant"])</value>
</set-query-parameter>
...