Отправить запрос

ОБЛАСТЬ ПРИМЕНЕНИЯ: все уровни Управление API

Политика send-request отправляет запрос по указанному URL-адресу с задержкой, не превышающей заданное значение времени ожидания.

Примечание.

Задайте элементы политики и дочерние элементы в порядке, указанном в правиле политики. Узнайте, как устанавливать или изменять политики службы управления API.

Правило политики

<send-request mode="new | copy" response-variable-name="" timeout="60 sec" ignore-error
="false | true">
  <set-url>request URL</set-url>
  <set-method>...</set-method>
  <set-header>...</set-header>
  <set-body>...</set-body>
  <authentication-certificate thumbprint="thumbprint" />
  <proxy>...</proxy>
</send-request>

Атрибуты

Атрибут Description Обязательное поле По умолчанию.
mode Определяет, является new ли это запросом или copy заголовками и текстом в текущем запросе. В разделе mode=copy политики исходящего трафика не инициализирует текст запроса. Допустимы выражения политики. No new
response-variable-name Имя переменной контекста, которая примет объект response. Если переменная отсутствует, она будет создана при успешном выполнении условий политики. К переменной можно будет получить доступ с помощью коллекции context.Variable. Допустимы выражения политики. Да Н/П
timeout Интервал времени ожидания в секундах до того, как вызов, адресованный URL-адресу, завершится сбоем. Допустимы выражения политики. No 60
ignore-error Если true и запрос приводит к ошибке, ошибка будет игнорироваться, а переменная ответа будет содержать значение NULL. Выражения политики не допускаются. No false

Элементы

Элемент Description Обязательное поле
set-url URL-адрес запроса. Допустимы выражения политики. Нет, если mode=copy; в противном случае да.
set-method Задает метод запроса. Выражения политики не допускаются. Нет, если mode=copy; в противном случае да.
set-header Задает заголовок в запросе. Используйте несколько элементов для нескольких set-header заголовков запросов. No
set-body Задает текст запроса. No
authentication-certificate Сертификат, используемый для проверки подлинности клиента, указанный в атрибуте thumbprint . No
прокси-сервер Маршрутизирует запрос через прокси-сервер HTTP. No

Использование

Примечания об использовании

Если экземпляр Управление API развертывается (внедряется) в виртуальной сети в внутреннем режиме и используется эта политика для отправки запроса API в API, который предоставляется в том же экземпляре Управление API, может возникнуть ошибка времени ожидания с ошибкой серверной части HTTP 500 Подключение ionFailure. Это результат ограничения Azure Load Balancer.

Чтобы создать цепочку запросов API к шлюзу в этом сценарии, настройте set-url использование URL-адреса https://127.0.0.1обратной связи localhost. Кроме того, задайте HOST заголовок, чтобы указать этот узел шлюза Управление API экземпляра. Вы можете использовать узел личного домена по умолчанию azure-api.net или пользовательский домен. Например:

<send-request>
     <set-url>https://127.0.0.1/myapi/myoperation</set-url>
     <set-header name="Host">
         <value>myapim.azure-api.net</value>
     </set-header>
</send-request>

Дополнительные сведения см. в этой записи блога.

Пример

В этом примере показан один из способов проверки маркера ссылки на сервере авторизации. Дополнительные сведения об этом примере см. в статье Использование внешних служб из службы управления API Azure.

<inbound>
  <!-- Extract token from Authorization header parameter -->
  <set-variable name="token" value="@(context.Request.Headers.GetValueOrDefault("Authorization","scheme param").Split(' ').Last())" />

  <!-- Send request to Token Server to validate token (see RFC 7662) -->
  <send-request mode="new" response-variable-name="tokenstate" timeout="20" ignore-error="true">
    <set-url>https://microsoft-apiappec990ad4c76641c6aea22f566efc5a4e.azurewebsites.net/introspection</set-url>
    <set-method>POST</set-method>
    <set-header name="Authorization" exists-action="override">
      <value>basic dXNlcm5hbWU6cGFzc3dvcmQ=</value>
    </set-header>
    <set-header name="Content-Type" exists-action="override">
      <value>application/x-www-form-urlencoded</value>
    </set-header>
    <set-body>@($"token={(string)context.Variables["token"]}")</set-body>
  </send-request>

  <choose>
        <!-- Check active property in response -->
        <when condition="@((bool)((IResponse)context.Variables["tokenstate"]).Body.As<JObject>()["active"] == false)">
            <!-- Return 401 Unauthorized with http-problem payload -->
            <return-response>
                <set-status code="401" reason="Unauthorized" />
                <set-header name="WWW-Authenticate" exists-action="override">
                    <value>Bearer error="invalid_token"</value>
                </set-header>
            </return-response>
        </when>
    </choose>
  <base />
</inbound>

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