Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
ОБЛАСТЬ ПРИМЕНЕНИЯ: все уровни управления API
Предоставляя объект ProxyError, Azure API Management позволяет издателям реагировать на условия ошибки, которые могут возникать во время обработки запросов. Доступ к объекту ProxyError осуществляется через свойство контекст.LastError. Политики в разделе on-error могут использовать объект ProxyError. Эта статья содержит справочную информацию о возможностях обработки ошибок, которые предоставляет служба управления API Azure.
Обработка ошибок в службе управления API
Политики в службе управления API Azure включают разделы inbound, backend, outbound и on-error, как показано в следующем примере.
<policies>
<inbound>
<!-- statements to be applied to the request go here -->
</inbound>
<backend>
<!-- statements to be applied before the request is
forwarded to the backend service go here -->
</backend>
<outbound>
<!-- statements to be applied to the response go here -->
</outbound>
<on-error>
<!-- statements to be applied if there is an error
condition go here -->
</on-error>
</policies>
Во время обработки запроса встроенные шаги выполняются вместе с любыми политиками, которые относятся к запросу. Если возникает ошибка, обработка немедленно переходит к разделу on-error политики.
Раздел политики on-error можно использовать в любой области. Издатели API могут настроить поведение, например, логирование ошибок в Центры событий Azure или создание нового ответа для возврата вызывающей стороне.
Примечание.
Этот on-error раздел не присутствует в политиках по умолчанию. Чтобы добавить в политику раздел on-error, перейдите к требуемой политике в редакторе политик и добавьте раздел. Дополнительные сведения о настройке политик см. в статье Политики в Azure API Management.
Если нет on-error раздела, вызывающие получают 400 или 500 сообщений HTTP-ответов, если возникает ошибка.
Политики, которые можно использовать в разделе on-error
В разделе on-error можно использовать следующие политики.
- выбирать
- set-variable
- поиск и замена
- return-response
- set-header
- метод установки
- Set-status
- send-request
- отправить-запрос-в-одну-сторону
- Log-to-eventhub
- json-to-xml
- xml-to-json
- ограничение конкурентности
- mock-response
- повторная попытка
- след
ПоследняяОшибка
При возникновении ошибки и переходе управления программы в on-error раздел политики, ошибка сохраняется в свойстве контекста LastError. Политики в разделе on-error могут получить доступ к context.LastError.
LastError имеет следующие свойства.
| Имя. | Тип | Описание | Обязательное поле |
|---|---|---|---|
Source |
строка | Имя элемента, в котором произошла ошибка. Это может быть либо политика, либо имя встроенного шага конвейера. | Да |
Reason |
строка | Код ошибки в машинном формате, который удобно использовать для обработки ошибок. | Нет |
Message |
строка | Описание ошибки в понятном для человека формате. | Да |
Scope |
строка | Имя области, в которой произошла ошибка. | Нет |
Section |
строка | Имя раздела, в котором произошла ошибка. Возможные значения: inbound, backend, outboundили on-error. |
Нет |
Path |
строка | Указывает вложенную иерархию политик, например choose[3]\\when[2]. Несколько экземпляров вложенной политики индексируются, начиная с 1. |
Нет |
PolicyId |
строка | Значение атрибута id для политики, в которой произошла ошибка (если указано клиентом). |
Нет |
Совет
Вы можете получить доступ к коду состояния с помощью context.Response.StatusCode.
Примечание.
Все политики имеют дополнительный атрибут id, который может быть добавлен к корневому элементу политики. Если этот атрибут присутствует в политике при возникновении условия ошибки, можно получить значение атрибута с помощью context.LastError.PolicyId свойства.
Стандартные ошибки для встроенных шагов
Далее перечислены стандартные ошибки, которые могут возникать во время оценки встроенных шагов обработки.
| Источник | Состояние | Причина | Сообщение |
|---|---|---|---|
| настройка | URI не соответствует ни одному API или операции | OperationNotFound | Unable to match incoming request to an operation. (Не удалось сопоставить входящий запрос с операцией.) |
| авторизация | Не предоставлен ключ подписки | Ключ подписки не найден | Доступ запрещен из-за отсутствия ключа подписки. Убедитесь, что вы включаете ключ подписки при отправке запросов к этому API. |
| авторизация | Недопустимое значение ключа подписки | НеверныйКлючПодписки | Доступ запрещен из-за недопустимого ключа подписки. Убедитесь, что предоставлен допустимый ключ для активной подписки. |
| несколько | Клиент прервал нисходящее подключение от клиента к шлюзу управления API во время ожидания запроса. | Ошибка подключения клиента | несколько |
| несколько | Серверная часть была прервана или не смогла установить входящее соединение (от шлюза управления API к серверной службе) | Сбой соединения с сервером Backend | несколько |
| несколько | Исключение среды выполнения произошло во время оценки конкретного выражения | Ошибка оценки значения выражения | несколько |
Стандартные ошибки для политик
Далее перечислены стандартные ошибки, которые могут возникнуть во время оценки политик.
| Источник | Состояние | Причина | Сообщение |
|---|---|---|---|
| ограничение частоты | Превышено ограничение скорости | Превышено ограничение скорости запросов | Rate limit is exceeded (Превышено ограничение скорости) |
| квота | Превышена квота | Квота превышена | превышена квота на количество вызовов. Quota will be replenished in xx:xx:xx. (Квота будет пополнена в xx:xx:xx.) -или- Превышена квота пропускной способности. Quota will be replenished in xx:xx:xx. (Квота будет пополнена в xx:xx:xx.) |
| jsonp | Недопустимое значение параметра обратного вызова (содержит неправильные символы) | Недопустимый параметр обратного вызова | Value of callback parameter {callback-parameter-name} is not a valid JavaScript identifier. (Значение параметра обратного вызова {имя параметра обратного вызова} не является допустимым идентификатором JavaScript.) |
| IP-фильтр | Не удалось проанализировать IP-адрес вызывающего объекта из запроса | Не удалось разобрать IP-адрес вызывающего абонента | Не удалось установить IP-адрес вызывающего объекта. Доступ запрещен. |
| IP-фильтр | IP-адрес вызывающего абонента не указан в списке разрешенных | Запрещённый IP вызывающего | IP-адрес звонящего {ip-address} не разрешен. Доступ запрещен. |
| IP-фильтр | IP-адрес вызывающего объекта включен в список заблокированных | БлокировкаIPЗвонящего | IP-адрес вызывающего абонента заблокирован. Доступ запрещен. |
| проверить заголовок | Отсутствует обязательный заголовок или его значение отсутствует | ЗаголовокНеНайден | В запросе не найден заголовок {header-name}. Доступ запрещен. |
| проверить заголовок | Отсутствует обязательный заголовок или его значение отсутствует | ЗначениеЗаголовкаНеДопустимо | Значение заголовка {header-name} равно {header-value} не допускается. Доступ запрещен. |
| проверка JWT | Веб-токен JSON (JWT) отсутствует в запросе | Токен отсутствует | JWT отсутствует. |
| проверка JWT | Ошибка при проверке подписи | Недействительная подпись токена | <сообщение из библиотеки jwt>. Доступ запрещен. |
| проверка JWT | Неверная аудитория | АудиторияТокенаНеРазрешена | <сообщение из библиотеки jwt>. Доступ запрещен. |
| проверка JWT | Недопустимый эмитент | Выдающий токены не разрешен | <сообщение из библиотеки jwt>. Доступ запрещен. |
| проверка JWT | Истек срок действия маркера | Срок действия токена истёк | <сообщение из библиотеки jwt>. Доступ запрещен. |
| проверка JWT | Ключ подписи не был определен идентификатором | Ключ подписи токена не найден | <сообщение из библиотеки jwt>. Доступ запрещен. |
| проверка JWT | В маркере отсутствуют необходимые утверждения | Требование токена не найдено | JWT отсутствуют следующие утверждения: <c1>, <c2>, ... Доступ запрещен. |
| проверка JWT | Несоответствие значений утверждения | Значение токена не разрешено | Не допускается утверждение {claim-name} значения {claim-value}. Доступ запрещен. |
| проверка JWT | Прочие сбои при проверке данных | JwtInvalid | <сообщение из библиотеки jwt> |
| перенаправление запроса или отправка запроса | Код состояния http-ответа и заголовки не были получены из серверной части в течение настроенного времени ожидания | Время ожидания | несколько |
Пример
Задайте для политики API следующее значение:
<policies>
<inbound>
<base />
</inbound>
<backend>
<base />
</backend>
<outbound>
<base />
</outbound>
<on-error>
<set-header name="ErrorSource" exists-action="override">
<value>@(context.LastError.Source)</value>
</set-header>
<set-header name="ErrorReason" exists-action="override">
<value>@(context.LastError.Reason)</value>
</set-header>
<set-header name="ErrorMessage" exists-action="override">
<value>@(context.LastError.Message)</value>
</set-header>
<set-header name="ErrorScope" exists-action="override">
<value>@(context.LastError.Scope)</value>
</set-header>
<set-header name="ErrorSection" exists-action="override">
<value>@(context.LastError.Section)</value>
</set-header>
<set-header name="ErrorPath" exists-action="override">
<value>@(context.LastError.Path)</value>
</set-header>
<set-header name="ErrorPolicyId" exists-action="override">
<value>@(context.LastError.PolicyId)</value>
</set-header>
<set-header name="ErrorStatusCode" exists-action="override">
<value>@(context.Response.StatusCode.ToString())</value>
</set-header>
<base />
</on-error>
</policies>
Отправка несанкционированного запроса приводит к следующему ответу:
Связанный контент
Дополнительные сведения о работе с политиками см. в нижеуказанных статьях.
- Учебное пособие: Преобразование и защита API
- Полный перечень заявлений политик и их параметров можно найти в справочнике по политикам.
- Выражения политики
- Настройка или изменение политик
- Повторное использование конфигураций политик
- Репозиторий фрагментов политик
- репозиторий примеров политик
- Набор политик Управления API Azure
- Получите помощь Copilot для создания, объяснения и устранения неполадок в политике