Отправить запрос
ОБЛАСТЬ ПРИМЕНЕНИЯ: все уровни Управление 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 |
Использование
- Разделы политики: inbound, outbound, backend, on-error.
- Области политики: глобальная, рабочая область, продукт, API, операция
- Шлюзы: выделенные, потребление, локальное размещение, рабочая область
Примечания об использовании
Если экземпляр Управление API развертывается (внедряется) в виртуальной сети в внутреннем режиме и используется эта политика для отправки запроса API в API, который предоставляется в том же экземпляре Управление API, может возникнуть ошибка времени ожидания с ошибкой HTTP 500 BackendConnectionFailure. Это результат ограничения 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>
Связанные политики
Связанный контент
Дополнительные сведения о работе с политиками см. в нижеуказанных статьях.
- Руководство. Преобразование и защита API
- Полный перечень операторов политик и их параметров см. в справочнике по политикам.
- Выражения политики
- Настройка или изменение политик
- Повторное использование конфигураций политик
- Репозиторий фрагментов политик
- Создание политик с помощью Microsoft Copilot в Azure