Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
ОБЛАСТЬ ПРИМЕНЕНИЯ: все уровни Управление API
Предоставляя объект ProxyError
, служба управления API Azure позволяет издателям реагировать на ошибки, которые могут возникать во время обработки запросов. Доступ к объекту ProxyError
осуществляется через свойство context.LastError, и его могут использовать политики в разделе on-error
. Эта статья содержит справочную информацию о возможностях обработки ошибок, которые предоставляет служба управления 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 могут настроить требуемые действия, например запись информации об ошибках в концентраторы событий или создание нового ответа для передачи вызывающему объекту.
Примечание.
Раздел on-error
в политиках отсутствует по умолчанию. Чтобы добавить в политику раздел on-error
, перейдите к требуемой политике в редакторе политик и добавьте раздел. Дополнительные сведения о настройке политик см. в статье Политики в Azure API Management.
Если в политике нет раздела on-error
, вызывающий объект при возникновении ошибки получит сообщение с HTTP-кодом 400 или 500.
Политики, которые можно использовать в разделе 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
, ошибка сохраняется в свойстве context.LastError, к которому могут обращаться политики в разделе on-error
. LastError имеет следующие свойства.
Имя. | Тип | Описание | Обязательное поле |
---|---|---|---|
Source |
строка | Указывает имя элемента, в котором произошла ошибка. Это может быть политика или имя встроенного шага конвейера. | Да |
Reason |
строка | Код ошибки в машинном формате, который удобно использовать для обработки ошибок. | Нет |
Message |
строка | Описание ошибки в понятном для человека формате. | Да |
Scope |
строка | Имя области, в которой произошла ошибка. | Нет |
Section |
строка | Имя раздела, в котором произошла ошибка. Возможные значения: inbound, backend, outbound или on-error. | Нет |
Path |
строка | Указывает вложенную иерархию политики, например "выбрать[3]\when[2]". Несколько экземпляров вложенной политики индексируются с 1. | Нет |
PolicyId |
строка | Значение атрибута id для политики, в которой произошла ошибка (если указано клиентом). |
Нет |
Совет
Доступ к коду состояния можно получить с помощью context.Response.StatusCode.
Примечание.
Все политики имеют дополнительный атрибут id
, который может быть добавлен к корневому элементу политики. Если этот атрибут присутствует в политике, в которой возникает ошибка, его значение можно извлечь с помощью свойства context.LastError.PolicyId
.
Стандартные ошибки для встроенных шагов
Далее перечислены стандартные ошибки, которые могут возникать во время оценки встроенных шагов обработки.
Исходный код | Состояние | Причина | Сообщение |
---|---|---|---|
настройка | URI не соответствует ни одному API или операции | OperationNotFound | Unable to match incoming request to an operation. (Не удалось сопоставить входящий запрос с операцией.) |
авторизации | Не предоставлен ключ подписки | Ключ подписки не найден | Доступ запрещен из-за отсутствия ключа подписки. Make sure to include subscription key when making requests to this API. (Доступ запрещен из-за отсутствия ключа подписки. Обязательно включайте ключ подписки в запросы к этому API.) |
авторизации | Недопустимое значение ключа подписки | НеверныйКлючПодписки | Доступ запрещен из-за недопустимого ключа подписки. Make sure to provide a valid key for an active subscription. (Доступ запрещен из-за недопустимого ключа подписки. Укажите допустимый ключ активной подписки.) |
несколько | Нисходящее соединение (от клиента к шлюзу управления API) было прервано клиентом, пока запрос находился на рассмотрении | Ошибка подключения клиента | несколько |
несколько | Восходящее соединение (от клиента к шлюзу управления API) было прервано клиентом, пока запрос находился на рассмотрении | Сбой соединения с сервером Backend | несколько |
несколько | Исключительная ситуация во время выполнения определенного выражения | Ошибка оценки значения выражения | несколько |
Стандартные ошибки для политик
Далее перечислены стандартные ошибки, которые могут возникнуть во время оценки политик.
Исходный код | Состояние | Причина | Сообщение |
---|---|---|---|
ограничение частоты | Превышено ограничение скорости | Превышено ограничение скорости запросов | Rate limit is exceeded (Превышено ограничение скорости) |
квота | Превышена квота | Квота превышена | превышена квота на количество вызовов. Quota will be replenished in xx:xx:xx. (Квота будет пополнена в xx:xx:xx.) -или- Out of bandwidth quota. (Превышена квота пропускной способности.) 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 | 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 для создания, объяснения и устранения неполадок в политике