Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
APLICA-SE A: Todas as camadas de gerenciamento de API
Ao fornecer um objeto ProxyError, API Management do Azure permite aos editores responder a condições de erro que podem ocorrer durante o processamento de pedidos. O ProxyError objeto é acedido através da propriedade contexto.LastError. As políticas na on-error secção de políticas podem usar o ProxyError objeto. Este artigo fornece uma referência para os recursos de tratamento de erros 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 em inbound, backend, outbounde on-error seções, 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 um pedido, os passos incorporados são executados juntamente com quaisquer políticas que estejam no âmbito do pedido. Se ocorrer um erro, o processamento salta imediatamente para a secção política on-error .
A on-error seção de política pode ser usada em qualquer escopo. Os editores de APIs podem configurar comportamentos personalizados, como registar o erro no Hubs de Eventos do Azure ou criar uma nova resposta para devolver ao chamador.
Nota
A on-error secção não está presente nas apólices por defeito. Para adicionar a on-error seção a uma política, navegue até a política desejada no editor de políticas e adicione-a. Para obter mais informações sobre como configurar políticas, consulte Políticas no gerenciamento de API.
Se não houver secção on-error, os chamadores recebem mensagens de resposta HTTP 400 ou 500 caso ocorra uma condição de erro.
Políticas permitidas em caso de erro
As seguintes políticas podem ser usadas na secção de políticas on-error.
- escolha
- definir-variável
- localizar-e-substituir
- resposta de retorno
- set-header
- método de definição
- set-status
- Pedido de envio
- solicitação de envio unidirecional
- Iniciar sessão no EventHub
- json-para-xml
- xml-para-json
- limite-concorrência
- simulação-resposta
- tentar novamente
- Traço
ÚltimoErro
Quando ocorre um erro e o controlo salta para a on-error secção de políticas, o erro é armazenado na propriedade contexto.LastError. As políticas na on-error seção podem aceder context.LastError a.
LastError tem as seguintes propriedades.
| Nome | Tipo | Descrição | Obrigatório |
|---|---|---|---|
Source |
cadeia (de caracteres) | Nome do elemento onde ocorreu o erro. Pode ser uma política ou o nome de uma etapa de pipeline incorporada. | Sim |
Reason |
cadeia (de caracteres) | Código de erro amigável à máquina, que pode ser usado no tratamento de erros. | Não |
Message |
cadeia (de caracteres) | Descrição do erro legível por humanos. | Sim |
Scope |
cadeia (de caracteres) | Nome do escopo onde ocorreu o erro. | Não |
Section |
cadeia (de caracteres) | Nome da seção onde ocorreu o erro. Valores possíveis: inbound, backend, outbound, ou on-error. |
Não |
Path |
cadeia (de caracteres) | Especifica hierarquia de políticas aninhada, por exemplo choose[3]\\when[2]. Várias instâncias de uma política com estrutura aninhada são indexadas começando do número 1. |
Não |
PolicyId |
cadeia (de caracteres) | Valor do id atributo, se especificado pelo cliente, na política onde ocorreu o erro |
Não |
Gorjeta
Pode aceder ao código de estado através de context.Response.StatusCode.
Nota
Todas as políticas têm um atributo opcional id que pode ser adicionado ao elemento raiz da política. Se este atributo estiver presente numa apólice quando ocorre uma condição de erro, pode obter 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 internas.
| Origem | Condição | Razão | Mensagem |
|---|---|---|---|
| configuração | O URI não corresponde a nenhuma API ou operação | OperaçãoNotFound | Não foi possível associar a solicitação de entrada a uma operação. |
| autorização | Chave de subscrição não fornecida | ChaveDeSubscriçãoNãoEncontrada | Acesso negado devido à falta de 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 subscrição é inválido | ChaveDeSubscriçãoInválida | Acesso negado devido a chave de subscrição inválida. Certifique-se de fornecer uma chave válida para uma assinatura ativa. |
| múltiplos | O cliente abortou uma ligação a jusante (de um cliente para um gateway de Gestão de API) enquanto o pedido estava pendente | Falha de Conexão do Cliente | múltiplos |
| múltiplos | O back end abortou ou não conseguiu estabelecer uma ligação ascendente (de um gateway de gestão de API para um serviço back end) | FalhaNaConexãoDoBackend | múltiplos |
| múltiplos | A exceção em tempo de execução ocorreu durante a avaliação de uma expressão particular | Falha na Avaliação do Valor da Expressão | múltiplos |
Erros predefinidos 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.
| Origem | Condição | Razão | Mensagem |
|---|---|---|---|
| limitação de velocidade | Limite de taxa excedido | Limite de Taxa Excedido | O limite da taxa é excedido |
| quota | Quota excedida | QuotaExcedido | Fora da quota de volume de chamadas. A quota será reabastecida em xx:xx:xx. -ou- Fora do limite de largura de banda. A quota será reabastecida 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 | FailedToParseCallerIP | Falha ao estabelecer o endereço IP do chamador. Acesso negado. |
| filtro de IP | O IP do chamador não está na lista de permitidos | IPDoChamadorNãoPermitido | 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 | IPDoChamadorBloqueado | O endereço IP do chamador está bloqueado. Acesso negado. |
| cabeçalho-verificação | Cabeçalho obrigatório não apresentado ou valor ausente | CabeçalhoNãoEncontrado | Header {header-name} não foi encontrado na solicitação. Acesso negado. |
| cabeçalho-verificação | Cabeçalho obrigatório não apresentado ou valor ausente | ValorDeCabeçalhoNãoPermitido | O valor de cabeçalho {header-name} de {header-value} não é permitido. Acesso negado. |
| validar-jwt | O JSON Web Token (JWT) está em falta no pedido | TokenNãoPresente | JWT não presente. |
| validar-jwt | Falha na validação da assinatura | Assinatura do Token Inválida | <Mensagem da biblioteca JWT>. Acesso negado. |
| validar-jwt | Audiência inválida | PúblicoDoTokenNãoPermitido | <mensagem da biblioteca JWT>. Acesso negado. |
| validar-jwt | Emissor inválido | EmissorDeTokenNãoPermitido | <Mensagem da biblioteca JWT>. Acesso negado. |
| validar-jwt | O token expirou | Token Expirado | <Mensagem da biblioteca jwt>. Acesso negado. |
| validar-jwt | A chave de assinatura não foi resolvida pelo ID | TokenSignatureKeyNotFound (Chave de Assinatura do Token Não Encontrada) | <Mensagem da biblioteca JWT>. Acesso negado. |
| validar-jwt | As declarações necessárias estão ausentes do token | Token de Reivindicação Não Encontrado | JWT está a faltar as seguintes declarações: <c1>, <c2>, ... Acesso negado. |
| validar-jwt | Incompatibilidade de valores de reclamação | Valor de Reivindicação do Token Não Permitido | 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> |
| Solicitação de encaminhamento ou solicitação de envio | O código de estado da resposta HTTP e os cabeçalhos não foram recebidos do backend dentro do timeout configurado | Limite de tempo excedido | múltiplos |
Exemplo
Defina uma política de API para 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 um pedido não autorizado resulta na seguinte resposta:
Conteúdos relacionados
Para obter mais informações sobre como trabalhar com políticas, consulte:
- Tutorial: Transforme e proteja sua API
- Referência de Política para uma lista completa de afirmações de política e suas definições
- Expressões de política
- Definir ou editar políticas
- Reutilizar configurações de política
- Repositório de fragmentos de política
- Repositório de exemplos de políticas
- Kit de ferramentas de política de Gerenciamento de API do Azure
- Obtenha assistência do Copilot para criar, explicar e resolver problemas com políticas