Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
GÄLLER FÖR: Alla API Management-nivåer
Genom att tillhandahålla ett ProxyError objekt tillåter Azure API Management utgivare att svara på felvillkor som kan inträffa under bearbetningen av begäranden. Objektet ProxyError nås via egenskapen context.LastError. Policier i policyavsnittet on-error kan använda ProxyError-objektet. Den här artikeln innehåller en referens för felhanteringsfunktionerna i Azure API Management.
Felhantering i API Management
Principer i Azure API Management är indelade i inbound, backend, outboundoch on-error avsnitt som visas i följande exempel.
<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>
Under bearbetningen av en förfrågan körs inbyggda steg tillsammans med alla principer som omfattas av förfrågan. Om ett fel inträffar hoppar bearbetningen omedelbart till principavsnittet on-error .
Principavsnittet on-error kan användas i valfritt omfång. API-utgivare kan konfigurera anpassat beteende, till exempel att logga felet till Azure Event Hubs eller skapa ett nytt svar för att återgå till anroparen.
Kommentar
Avsnittet on-error finns inte i policyer som standard. Om du vill lägga till avsnittet i on-error en princip bläddrar du till önskad princip i principredigeraren och lägger till den. Mer information om hur du konfigurerar principer finns i Principer i API Management.
Om det inte finns något on-error avsnitt får anropare 400 eller 500 HTTP-svarsmeddelanden om ett feltillstånd inträffar.
Principer som tillåts i on-error
Följande principer kan användas i principavsnittet on-error .
- välja
- sätt-variabel
- sök-och-ersätt
- return-response
- set-header
- inställningsmetod
- set-status
- send-request
- skicka endavägsförfrågan
- log-to-eventhub
- json-to-xml
- xml-to-json
- limit-concurrency
- mock-response
- Försök igen
- spåra
LastError
När ett fel inträffar och kontrollen hoppar till on-error policydelen, lagras felet i kontextens egenskap LastError. Policys i on-error-avsnittet kan komma åt context.LastError.
LastError har följande egenskaper.
| Namn | Typ | Beskrivning | Obligatoriskt |
|---|---|---|---|
Source |
sträng | Namnet på elementet där felet inträffade. Kan vara antingen en princip eller ett inbyggt pipeline-stegnamn. | Ja |
Reason |
sträng | Maskinanpassad felkod som kan användas vid felhantering. | Nej |
Message |
sträng | Mänskligläsbar felbeskrivning. | Ja |
Scope |
sträng | Namnet på omfånget där felet inträffade. | Nej |
Section |
sträng | Avsnittsnamn där felet uppstod. Möjliga värden: inbound, backend, outboundeller on-error. |
Nej |
Path |
sträng | Anger kapslad principhierarki, till exempel choose[3]\\when[2]. Flera instanser av en kapslad princip indexeras från 1. |
Nej |
PolicyId |
sträng | Värdet för id attributet, om det specificeras av kunden, på den policy där felet inträffade. |
Nej |
Tips
Du kan komma åt statuskoden via context.Response.StatusCode.
Kommentar
Alla principer har ett valfritt id attribut som kan läggas till i principens rotelement. Om det här attributet finns i en princip när ett feltillstånd inträffar kan du hämta värdet för attributet med hjälp av context.LastError.PolicyId-egenskapen.
Fördefinierade fel för inbyggda steg
Följande fel är fördefinierade för feltillstånd som kan inträffa under utvärderingen av inbyggda bearbetningssteg.
| Källa | Villkor | Anledning | Meddelande |
|---|---|---|---|
| konfiguration | URI matchar inte något API eller någon åtgärd | OperationNotFound | Det går inte att matcha inkommande begäran till en åtgärd. |
| auktorisering | Prenumerationsnyckeln har inte angetts | Abonnemangsnyckel saknas | Åtkomst nekad på grund av att prenumerationsnyckeln saknas. Se till att inkludera prenumerationsnyckeln när du gör begäranden till det här API:et. |
| auktorisering | Värdet för prenumerationsnyckeln är ogiltigt | PrenumerationsnyckelOgiltig | Åtkomst nekad på grund av ogiltig prenumerationsnyckel. Se till att ange en giltig nyckel för en aktiv prenumeration. |
| multipel | Klienten avbröt en nedströmsanslutning (från en klient till en API Management-gateway) medan begäran var väntande | Klientanslutningsfel | multipel |
| multipel | Serverdelen avbröts eller kunde inte upprätta en upstream-anslutning (från en API Management-gateway till en backend-tjänst) | Bakendanslutningsfel | multipel |
| multipel | Körningsexception inträffade i samband med utvärderingen av ett visst uttryck | Utvärderingsfel för uttrycksvärde | multipel |
Fördefinierade fel för principer
Följande fel är fördefinierade för feltillstånd som kan inträffa under principutvärderingen.
| Källa | Villkor | Anledning | Meddelande |
|---|---|---|---|
| hastighetsgräns | Hastighetsgränsen har överskridits | RateLimitExceeded | Hastighetsgränsen har överskridits |
| kvot | Kvoten har överskridits | Kvot Överskriden | Slut på kvot för samtalsvolym. Kvoten fylls på i xx:xx:xx. -eller- Bandbreddskvoten är slut. Kvoten fylls på i xx:xx:xx. |
| jsonp | Värdet för motringningsparametern är ogiltigt (innehåller fel tecken) | Ogiltig Återuppringningsparameter | Värdet för motringningsparametern {callback-parameter-name} är inte en giltig JavaScript-identifierare. |
| ip-filter | Det gick inte att parsa anroparens IP-adress från begäran | Misslyckades att tolka uppringarens IP | Det gick inte att upprätta IP-adressen för anroparen. Åtkomst nekad. |
| ip-filter | Uppringarens IP-adress finns inte i listan över tillåtna | CallerIpEjTillåten | Anroparens IP-adress {ip-address} är inte tillåten. Åtkomst nekad. |
| ip-filter | Uppringarens IP-adress finns i en lista över blockerade | Samtals-IP blockerad | Anroparens IP-adress är blockerad. Åtkomst nekad. |
| kontrollhuvud | Obligatorisk rubrik saknas eller så saknas värdet. | HeaderNotFound | Det gick inte att hitta rubriken {header-name} i begäran. Åtkomst nekad. |
| kontrollhuvud | Obligatorisk rubrik visas inte eller värdet saknas | RubrikvärdeEjTillåtet | Rubrik {header-name} värde för {header-value} tillåts inte. Åtkomst nekad. |
| validate-jwt | JSON-webbtoken (JWT) saknas i begäran | TokenNotPresent | JWT finns inte. |
| validate-jwt | Signaturverifieringen misslyckades | Ogiltig Token-Signatur | <meddelande från jwt-biblioteket>. Åtkomst nekad. |
| validate-jwt | Ogiltig målgrupp | TokenMottagareEjTillåten | <meddelande från jwt-biblioteket>. Åtkomst nekad. |
| validate-jwt | Ogiltig utfärdare | Tokenutgivare ej tillåten | <meddelande från jwt-biblioteket>. Åtkomst nekad. |
| validate-jwt | Token har upphört att gälla | Token har gått ut | <meddelande från jwt-biblioteket>. Åtkomst nekad. |
| validate-jwt | Signaturnyckeln kunde inte identifieras med ID | TokenSignatureKeyNotFound | <meddelande från jwt-biblioteket>. Åtkomst nekad. |
| validate-jwt | Nödvändiga krav saknas i token | Tokenanspråk ej funnet | JWT saknar följande anspråk: <c1>, <c2>, ... Åtkomst nekad. |
| validate-jwt | Matchningsfel för anspråksvärden | TokenFordringsvärdeInteTillåtet | Anspråksvärdet {claim-name} för {claim-value} tillåts inte. Åtkomst nekad. |
| validate-jwt | Andra valideringsfel | Ogiltig Jwt | <meddelande från jwt-biblioteket> |
| vidarebefordra-begäran eller skicka-begäran | HTTP-svarsstatuskod och headers togs inte emot från bakänden inom den konfigurerade tidsgränsen | Tidsavbrott | multipel |
Exempel
Ange en API-princip till följande värde:
<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>
Att skicka en obehörig begäran resulterar i följande svar:
Relaterat innehåll
Mer information om hur du arbetar med principer finns i:
- Självstudie: Transformera och skydda ditt API
- Policydokumentation för en fullständig lista över policyuttalanden och deras inställningar
- Policyuttryck
- Ange eller redigera principer
- Återanvända policykonfigurationer
- Repositorium för policysnippets
- Policyexempel-databibliotek
- Policyverktyg för Azure API Management
- Få Hjälp med Copilot för att skapa, förklara och felsöka principer