Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
APLICA-SE A: todas as camadas do Gerenciamento de API
Ao fornecer um objeto ProxyError, Gerenciamento de API do Azure permite que os editores respondam às condições de erro, que podem ocorrer durante o processamento de solicitações. O ProxyError objeto é acessado por meio da propriedade contexto.LastError. As políticas na on-error seção de política podem usar o ProxyError objeto. Este artigo fornece uma referência para os recursos de tratamento de erro no Gerenciamento de API do Azure.
Tratamento de erros no Gerenciamento de API
As políticas no Gerenciamento de API do Azure são divididas nas seções inbound, backend, outbound e on-error conforme mostrado no exemplo a seguir.
<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>
Durante o processamento de uma solicitação, as etapas internas são executadas juntamente com as políticas que estão no escopo da solicitação. Se um erro ocorrer, o processamento imediatamente salta para a seção de política on-error.
A seção de política on-error pode ser usada em qualquer escopo. Os editores de API podem configurar o comportamento personalizado, como registrar o erro no Hubs de Eventos do Azure ou criar uma nova resposta como retorno para o chamador.
Observação
A on-error seção não está presente em políticas por padrão. Para adicionar a seção on-error a uma política, navegue até a política desejada no editor de políticas e adicione-a. Para informações sobre como configurar políticas, consulte Políticas do Gerenciamento de API.
Se não houver nenhuma on-error seção, os chamadores receberão 400 ou 500 mensagens de resposta HTTP se ocorrer uma condição de erro.
Políticas permitidas em caso de erro
As políticas a seguir podem ser usadas na seção da política on-error.
- escolher
- definir-variável (set-variable)
- localizar e substituir
- return-response
- set-header
- método de definição
- set-status
- send-request
- enviar-solicitação-unidirecional
- registrar em EventHub
- json-to-xml
- xml-to-json
- limit-concurrency
- mock-response
- Repetir
- trace
LastError
Quando ocorre um erro e o controle salta para a on-error seção de política, o erro é armazenado na propriedade context.LastError. As políticas na on-error seção podem acessar context.LastError.
LastError tem as propriedades a seguir.
| Nome | Tipo | Descrição | Obrigatório |
|---|---|---|---|
Source |
cadeia | Nome do elemento em que o erro ocorreu. Pode ser o nome de uma etapa do pipeline interno ou política. | Sim |
Reason |
cadeia | Código de erro amigável para computadores, que pode ser usado no tratamento de erro. | Não |
Message |
cadeia | Descrição de erro legível por humanos. | Sim |
Scope |
cadeia | Nome do escopo em que o erro ocorreu. | Não |
Section |
cadeia | Nome da seção em que ocorreu o erro. Valores possíveis: inbound, backend, outboundou on-error. |
Não |
Path |
cadeia | Especifica a hierarquia de política aninhada, por exemplo choose[3]\\when[2]. Várias instâncias de uma política aninhada são indexadas a partir de 1. |
Não |
PolicyId |
cadeia | O valor do atributo id, se especificado pelo cliente, na política em que ocorreu o erro |
Não |
Dica
Você pode acessar o código de status por meio de context.Response.StatusCode.
Observação
Todas as políticas têm um atributo id opcional que pode ser adicionado ao elemento raiz da política. Se esse atributo estiver presente em uma política quando ocorrer uma condição de erro, você poderá recuperar o valor do atributo usando a context.LastError.PolicyId propriedade.
Erros predefinidos para etapas internas
Os erros a seguir são predefinidos para condições de erro que podem ocorrer durante a avaliação das etapas de processamento interno.
| Fonte | Condição | Motivo | Mensagem |
|---|---|---|---|
| configuração | O URI não corresponde a nenhuma API ou Operação | OperaçãoNãoEncontrada | Não é possível corresponder a solicitação recebida a uma operação. |
| autorização | Chave de assinatura não fornecida | SubscriptionKeyNotFound | Acesso negado devido à ausência da chave de assinatura. Certifique-se de incluir a chave de assinatura ao fazer solicitações para esta API. |
| autorização | O valor da chave de assinatura é inválido | ChaveDeAssinaturaInválida | Acesso negado devido à chave de assinatura inválida. Certifique-se de fornecer uma chave válida para uma assinatura ativa. |
| múltiplo | O cliente anulou uma conexão downstream (de um cliente para um gateway de Gerenciamento de API) enquanto a solicitação estava pendente | FalhaNaConexãoDoCliente | múltiplo |
| múltiplo | O back-end foi abortado ou não pôde estabelecer uma conexão de saída (de um API Management Gateway para um serviço de back-end) | FalhaNaConexãoComOBackend | múltiplo |
| múltiplo | A exceção de runtime ocorreu durante a avaliação de uma expressão específica | FalhaNaAvaliaçãoDoValorDaExpressão | múltiplo |
Falhas predefinidas para políticas
Os erros a seguir são predefinidos para condições de erro que podem ocorrer durante a avaliação da política.
| Fonte | Condição | Motivo | Mensagem |
|---|---|---|---|
| limitação de taxa | Limite de taxa excedido | Limite de Taxa Excedido | O limite da taxa foi excedido |
| cota | Cota excedida | Cota Excedida | Quota de volume de chamadas excedida. A cota será reposta em xx:xx:xx. – ou – Sem cota de largura de banda. A cota será reposta em xx:xx:xx. |
| jsonp | O valor do parâmetro de retorno de chamada é inválido (contém caracteres errados) | ParâmetroDeRetornoInválido | O valor do parâmetro de retorno de chamada {callback-parameter-name} não é um identificador JavaScript válido. |
| filtro de IP | Falha ao analisar o IP do chamador da solicitação | Falha ao Analisar IP do Chamador | Falha ao estabelecer o endereço IP para o chamador. Acesso negado. |
| filtro de IP | O IP do chamador não está na lista de permissões | IP do Chamador Não Permitido | O endereço IP do chamador {ip-address} não é permitido. Acesso negado. |
| filtro de IP | O IP do chamador está na lista de bloqueios | IP do Chamador Bloqueado | O endereço IP do chamador está bloqueado. Acesso negado. |
| cabeçalho de verificação | O cabeçalho necessário não é apresentado ou o valor está ausente | CabeçalhoNãoEncontrado | O cabeçalho {header-name} não foi encontrado na solicitação. Acesso negado. |
| cabeçalho de verificação | O cabeçalho necessário não é apresentado ou o valor está ausente | ValorDeCabeçalhoNãoPermitido | O valor do cabeçalho {header-name} de {header-value} não é permitido. Acesso negado. |
| validar JWT | O JWT (Token Web JSON) está ausente na solicitação | TokenNãoPresente | JWT não presente. |
| validar JWT | Falha na validação da assinatura | AssinaturaDoTokenInválida | <mensagem da biblioteca jwt> Acesso negado. |
| validar JWT | Público-alvo inválido | TokenAudienciaNaoPermitida | <mensagem da biblioteca jwt> Acesso negado. |
| validar JWT | Emissor inválido | EmissorDeTokenNãoPermitido | <mensagem da biblioteca jwt> Acesso negado. |
| validar JWT | Token expirado | Token Expirado | <mensagem da biblioteca jwt> Acesso negado. |
| validar-jwt | A chave de assinatura não foi resolvida pela ID | TokenSignatureKeyNotFound | <mensagem da biblioteca jwt> Acesso negado. |
| validar-jwt | As declarações necessárias estão ausentes no token | TokenClaimNãoEncontrado | JWT está faltando as seguintes declarações: <c1>, <c2>, ... Acesso negado. |
| validar-jwt | Incompatibilidade de valores de reivindicação | ValorDeReivindicaçãoDeTokenNãoPermitido | O valor da reivindicação {claim-name} de {claim-value} não é permitido. Acesso negado. |
| validar JWT | Outras falhas de validação | JwtInválido | <mensagem da biblioteca jwt> |
| encaminhar solicitações ou enviar solicitações | O código de status de resposta HTTP e os cabeçalhos não foram recebidos do back-end dentro do tempo limite configurado | Timeout | múltiplo |
Exemplo
Defina uma política de API com o seguinte valor:
<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>
Enviar uma solicitação não autorizada resulta na seguinte resposta:
Conteúdo relacionado
Para obter mais informações sobre como trabalhar com políticas, consulte:
- Tutorial: Transformar e proteger sua API
- Referência de Política para uma lista completa das instruções de política e suas configurações
- Expressões de política
- Definir ou editar políticas
- Reutilizar configurações de políticas
- Repositório de fragmentos de código de política
- repositório de exemplos de políticas
- Kit de ferramentas de políticas do Gerenciamento de API do Azure
- Obter assistência do Copilot para criar, explicar e solucionar problemas de políticas