Переименовать параметр запроса в исходящем запросе в Azure API Management - PullRequest
0 голосов
/ 10 июня 2019

Используя политики в Azure API Management, я пытаюсь переименовать параметр запроса, но он не работает.Если я изменю copy-unmatched-params = "false" на copy-unmatched-params = "true", то это сработает, но поведение таково, что все несопоставленные параметры будут переданы бэкэнд-API, что позволит клиентам вводить свой собственный запроспараметры в запросе бэкэнда, который нам не нужен.

Все остальное в порядке.

Я хочу преобразовать входящий запрос, который выглядит следующим образом:

https://{site}/search?query=dylan

Кому:

https://{backend-site}documents?api-version=2018-1-11&amount=1000&searchFields=Album,Artist&search=dylan

Единственная часть, которая не работает, это преобразованиепараметр запроса будет называться «поиск» вместо запроса, не позволяя передавать все параметры из входящей строки запроса.Как я могу это исправить?

<policies>
    <inbound>
        <rewrite-uri template="/" copy-unmatched-params="false" />
        <set-header name="api-key" exists-action="override">
            <value>THIS-IS-API-KEI</value>
        </set-header>
        <set-query-parameter name="api-version" exists-action="override">
            <value>2018-1-11</value>
        </set-query-parameter>
        <set-query-parameter name="amount" exists-action="override">
            <value>1000</value>
        </set-query-parameter>
        <set-query-parameter name="searchFields" exists-action="override">
            <value>Album,Artist</value>
        </set-query-parameter>
        <set-query-parameter name="search" exists-action="override">
            <value>@(context.Request.Url.Query.GetValueOrDefault("query"))</value>
        </set-query-parameter>
    </inbound>
    <backend>
        <base />
    </backend>
    <outbound>
        <base />
    </outbound>
    <on-error>
        <base />
    </on-error>
</policies>

Ответы [ 2 ]

0 голосов
/ 12 июня 2019

Попробуйте использовать переменные.Присвойте значение переменной в начале и используйте переменную для назначения нового параметра запроса

0 голосов
/ 11 июня 2019

Причина, по которой вы получаете пустое значение из вашего последнего выражения, заключается в том, что к тому времени ваш URI уже переписан в «/» и установлены только параметры запроса «api-version», «amount» и «searchFields».Есть несколько способов сделать это:

  1. Обратитесь к исходному URL: @(context.Request.OriginalUrl.Query.GetValueOrDefault("query"))
  2. Добавьте запрос в шаблон URI операции - search? Query = {query} - и обратитесьэто из политики rewrite-uri: <rewrite-uri template="/?query={query}" copy-unmatched-params="false" />.Недостатком является то, что параметр «query» становится обязательным, поэтому любой запрос без него приведет к 404.
...