Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
SE APLICA A: todos los niveles de API Management
Al proporcionar un objeto ProxyError, Azure API Management permite a los publicadores responder a condiciones de error, que pueden producirse durante el procesamiento de solicitudes. El ProxyError objeto se accede a través de la propiedad contexto.LastError. Las directivas de la on-error sección de directivas pueden usar el ProxyError objeto . En este tema se proporciona una referencia a las funcionalidades de control de errores de Azure API Management.
Control de errores en API Management
Las directivas de Azure API Management están divididas en las secciones inbound, backend, outbound y on-error, como se muestra en el ejemplo siguiente.
<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 el procesamiento de una solicitud, los pasos integrados se ejecutan junto con las directivas que están en el ámbito de la solicitud. Si se produce un error, el procesamiento salta inmediatamente a la sección de directivas on-error.
La sección de directivas on-error se puede utilizar en cualquier ámbito. Los publicadores de API pueden configurar el comportamiento personalizado, como registrar el error para Azure Event Hubs o crear una nueva respuesta para volver al autor de la llamada.
Nota
La on-error sección no está presente en las directivas de forma predeterminada. Para agregar la sección on-error a una directiva, vaya a la directiva deseada en el editor de directivas y agréguela. Para más información sobre cómo configurar directivas, consulte Directivas en API Management.
Si no hay ninguna on-error sección, los autores de llamadas reciben 400 o 500 mensajes de respuesta HTTP si se produce una condición de error.
Directivas permitidas en on-error
Las siguientes directivas se pueden usar en la sección de directivas on-error.
- elegir
- set-variable
- buscar y reemplazar
- return-response
- set-header
- set-method
- set-status
- send-request
- enviar-solicitud-unidireccional
- registro a EventHub
- json-to-xml
- xml-to-json
- límite-de-concurrencia
- mock-response
- reintentar
- trace
LastError
Cuando se produce un error y el control salta a la on-error sección de directiva, el error se almacena en la propiedad contexto.LastError. Las directivas en la sección on-error pueden acceder a context.LastError.
LastError tiene las siguientes propiedades.
| Nombre | Tipo | Descripción | Obligatorio |
|---|---|---|---|
Source |
cuerda / cadena | Nombre del elemento donde se produjo el error. Puede ser el nombre de una directiva o el nombre de un paso de canalización integrado. | Sí |
Reason |
cuerda / cadena | Código de error reconocible por la máquina, que se puede utilizar en el control de errores. | No |
Message |
cuerda / cadena | Descripción del error legible para el usuario. | Sí |
Scope |
cuerda / cadena | Nombre del ámbito donde se produjo el error. | No |
Section |
cuerda / cadena | Nombre de la sección donde se produjo el error. Valores posibles: inbound, backend, outboundo on-error. |
No |
Path |
cuerda / cadena | Especifica la jerarquía de directivas anidadas, por ejemplo choose[3]\\when[2]. Las instancias múltiples de una directiva anidada se indexan a partir de 1. |
No |
PolicyId |
cuerda / cadena | Valor del atributo id, si lo especifica el cliente, en la directiva donde se produjo el error. |
No |
Sugerencia
Puede acceder al código de estado a través de context.Response.StatusCode.
Nota
Todas las directivas tienen un atributo id opcional que se pude agregar al elemento raíz de la directiva. Si este atributo está presente en una directiva cuando se produce una condición de error, puede recuperar el valor del atributo mediante la context.LastError.PolicyId propiedad .
Errores predefinidos para pasos integrados
Los errores siguientes están predefinidos para condiciones de error que se pueden producir durante la evaluación de pasos de procesamiento integrados.
| Fuente | Condición | Motivo | Mensaje |
|---|---|---|---|
| configuración | El URI no coincide con ninguna API o operación | OperaciónNoEncontrada | No se puede asociar la solicitud entrante con una operación. |
| autorización | No se ha proporcionado la clave de suscripción. | ClaveDeSuscripciónNoEncontrada | Acceso denegado debido a que falta la clave de suscripción. Asegúrese de incluir la clave de la suscripción al realizar solicitudes a esta API. |
| autorización | El valor de la clave de suscripción no es válido. | ClaveDeSuscripciónInválida | Acceso denegado debido a una clave de suscripción no válida. Asegúrese de proporcionar una clave válida para una suscripción activa. |
| varios | El cliente anuló una conexión descendente (de un cliente a una puerta de enlace de gestión de API) mientras la solicitud estaba pendiente. | FalloDeConexiónDelCliente | varios |
| varios | El back-end anuló o no pudo establecer una conexión ascendente (desde una puerta de enlace de API Management a un servicio back-end). | Fallo en la Conexión al Backend | varios |
| varios | Excepción en tiempo de ejecución durante la evaluación de una expresión determinada | FalloEnLaEvaluaciónDelValorDeLaExpresión | varios |
Errores predefinidos en directivas
Los errores siguientes están predefinidos para condiciones de error que se pueden producir durante la evaluación de directivas.
| Fuente | Condición | Motivo | Mensaje |
|---|---|---|---|
| limitación de velocidad | Límite de velocidad excedido | Límite de velocidad excedido | Rate limit is exceeded (Se ha excedido el límite de velocidad). |
| cuota | Cuota superada | Cuota Excedida | Excedido el límite de la cuota de volumen de llamadas. La cuota se reabastecerá en xx:xx:xx. O bien, Fuera de la cuota de ancho de banda. La cuota se reabastecerá en xx:xx:xx. |
| jsonp | El valor del parámetro de devolución de llamada no es válido (contiene caracteres incorrectos). | ParámetroDeRetrollamadaInválido | Value of callback parameter {callback-parameter-name} is not a valid JavaScript identifier (El valor del parámetro de devolución de llamada {callback-parameter-name} no es un identificador de JavaScript válido). |
| filtro de IP | No se pudo analizar la IP de autor de llamada de la solicitud. | Error al analizar la IP del llamante | No se pudo establecer la dirección IP del autor de la llamada. Acceso denegado. |
| filtro de IP | La dirección IP del autor de la llamada no está en la lista de permitidos | IpDelLlamanteNoPermitida | No se permite la dirección IP del autor de llamada {ip-address}. Acceso denegado. |
| filtro de IP | La IP del autor de la llamada está en la lista de bloqueados. | IP del llamante bloqueada | La dirección IP del autor de la llamada está bloqueada. Acceso denegado. |
| check-header | El encabezado necesario no está presente o falta un valor. | EncabezadoNoEncontrado | No se encontró el encabezado {header-name} en la solicitud. Acceso denegado. |
| check-header | El encabezado necesario no está presente o falta un valor. | ValorDeEncabezadoNoPermitido | No se permite el valor de encabezado {header-name} de {header-value}. Acceso denegado. |
| validar JWT | Falta JSON Web Token (JWT) en la solicitud | TokenNotPresent | JWT ausente. |
| validar JWT | Error de validación de contraseña. | FirmaDeTokenInválida | <mensaje de la biblioteca de JWT>. Acceso denegado. |
| validar JWT | Audiencia no válida. | AudienciaDeTokenNoPermitida | <mensaje de la biblioteca JWT>. Acceso denegado. |
| validar JWT | Emisor no válido | EmisorDeTokenNoPermitido | <mensaje de la biblioteca jwt>. Acceso denegado. |
| validar JWT | Token expirado | TokenCaducado | <mensaje de la biblioteca JWT>. Acceso denegado. |
| validar JWT | La clave de firma no se resolvió mediante el identificador | ClaveDeFirmaDeTokenNoEncontrada | <mensaje de la librería jwt>. Acceso denegado. |
| validar JWT | Faltan las reclamaciones necesarias del token. | ReclamaciónDeTokenNoEncontrada | Al JWT le faltan las siguientes reclamaciones: <c1>, <c2>, ... Acceso denegado. |
| validar JWT | Error de desajuste de valores de la declaración. | TokenClaimValueNotAllowed (Valor de Reclamación de Token No Permitido) | No se permite la notificación {claim-name} valor de {claim-value}. Acceso denegado. |
| validar JWT | Otros errores de validación | JwtInválido | <mensaje de la biblioteca de JWT> |
| reenviar solicitud o enviar solicitud | El código de estado de respuesta HTTP y los encabezados no se recibieron del back-end dentro del tiempo de espera configurado. | Tiempo de espera | varios |
Ejemplo
Establezca una directiva de API en el siguiente 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 una solicitud no autorizada da como resultado la siguiente respuesta:
Contenido relacionado
Para obtener más información sobre trabajar con políticas, consulte:
- Tutorial: Transformación y protección de una API
- Referencia de directivas para una lista completa de declaraciones de directivas y sus configuraciones
- Expresiones de política
- Establecimiento o edición de directivas
- Reutilización de configuraciones de políticas
- Repositorio de fragmentos de código de directiva
- Repositorio de ejemplos de políticas
- Conjunto de herramientas de políticas de Azure API Management
- Obtener ayuda de Copilot para crear, explicar y solucionar problemas de directivas