Zpracování chyb v zásadách služby API Management
PLATÍ PRO: Všechny úrovně služby API Management
Díky poskytnutí objektu ProxyError
umožňuje Azure API Management vydavatelům reagovat na chybové stavy, ke kterým může dojít během zpracování požadavků. K ProxyError
objektu se přistupuje prostřednictvím kontextu. Vlastnost LastError a je možné ji použít zásadami v on-error
části zásady. Tento článek obsahuje referenční informace o možnostech zpracování chyb ve službě Azure API Management.
Zásady ve službě Azure API Management jsou rozdělené na inbound
oddíly a backend
outbound
on-error
oddíly, jak je znázorněno v následujícím příkladu.
<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>
Během zpracování požadavku se spustí předdefinované kroky spolu se všemi zásadami, které jsou v rozsahu požadavku. Pokud dojde k chybě, zpracování okamžitě přeskočí do on-error
části zásady.
Oddíl on-error
zásad lze použít v libovolném rozsahu. Vydavatelé rozhraní API můžou nakonfigurovat vlastní chování, jako je protokolování chyby do center událostí nebo vytvoření nové odpovědi, která se vrátí volajícímu.
Poznámka
Oddíl on-error
ve výchozím nastavení není v zásadách. Pokud chcete přidat on-error
oddíl do zásady, přejděte v editoru zásad na požadovanou zásadu a přidejte ji. Další informace o konfiguraci zásad najdete v tématu Zásady ve službě API Management.
Pokud neexistuje žádný on-error
oddíl, volající obdrží 400 nebo 500 zpráv odpovědi HTTP, pokud dojde k chybovému stavu.
V části zásady je možné použít on-error
následující zásady.
- zvolit
- set-variable
- find-and-replace
- return-response
- set-header
- set-method
- set-status
- send-request
- odeslání jednosměrné žádosti
- log-to-eventhub
- json-to-xml
- xml-to-json
- limit-concurrency
- mock-response
- zkusit ještě jednou
- stopa
Pokud dojde k chybě a řízení přeskočí do oddílu on-error
zásad, chyba se uloží v kontextu. Vlastnost LastError , ke které můžou přistupovat zásady v on-error
této části. LastError má následující vlastnosti.
Name | Typ | Popis | Povinní účastníci |
---|---|---|---|
Source |
string | Pojmenuje prvek, ve kterém došlo k chybě. Může to být zásada nebo předdefinovaný název kroku kanálu. | Ano |
Reason |
string | Strojově přívětivý kód chyby, který se dá použít při zpracování chyb. | No |
Message |
string | Popis chyby čitelné člověkem | Ano |
Scope |
string | Název oboru, ve kterém došlo k chybě. | No |
Section |
string | Název oddílu, kde došlo k chybě. Možné hodnoty: "příchozí", "backend", "odchozí" nebo "on-error". | No |
Path |
string | Určuje vnořenou hierarchii zásad, například "choose[3]\when[2]". Z 1 se indexuje více instancí vnořené zásady. | No |
PolicyId |
string | Hodnota atributu id , pokud je určena zákazníkem, v zásadách, kde došlo k chybě |
No |
Tip
Ke stavovém kódu se dostanete prostřednictvím kontextu. Response.StatusCode.
Poznámka
Všechny zásady mají volitelný id
atribut, který lze přidat do kořenového prvku zásady. Pokud se tento atribut nachází v zásadě v případě chybového stavu, lze hodnotu atributu context.LastError.PolicyId
načíst pomocí vlastnosti.
Následující chyby jsou předdefinované pro chybové stavy, ke kterým může dojít během vyhodnocení předdefinovaných kroků zpracování.
Zdroj | Podmínka | Důvod | Zpráva |
---|---|---|---|
konfigurace | Identifikátor URI se neshoduje s žádným rozhraním API nebo operací. | OperationNotFound | Příchozí požadavek nelze shodovat s operací. |
autorizace | Nezadávaná klíč předplatného | SubscriptionKeyNotFound | Přístup byl odepřen kvůli chybějícímu klíči předplatného. Při provádění požadavků na toto rozhraní API nezapomeňte zahrnout klíč předplatného. |
autorizace | Hodnota klíče předplatného je neplatná. | SubscriptionKeyInvalid | Přístup byl odepřen kvůli neplatnému klíči předplatného. Nezapomeňte zadat platný klíč pro aktivní předplatné. |
vícenásobné | Podřízené připojení (z klienta k bráně služby API Management) bylo klientem přerušeno během čekání na vyřízení požadavku. | ClientConnectionFailure | vícenásobné |
vícenásobné | Nadřazené připojení (z brány služby API Management k back-endové službě) nebylo vytvořeno nebo bylo přerušeno back-endem. | Chyba připojení back-endu | vícenásobné |
vícenásobné | Během vyhodnocení konkrétního výrazu došlo k výjimce za běhu. | ExpressionValueEvaluationFailure | vícenásobné |
Následující chyby jsou předdefinované pro chybové stavy, ke kterým může dojít během vyhodnocování zásad.
Zdroj | Podmínka | Důvod | Zpráva |
---|---|---|---|
limit rychlosti | Překročení limitu rychlosti | RateLimitExceededed | Překročení limitu rychlosti |
Kvóta | Překročení kvóty | QuotaExceeded | Překročení kvóty volání. Kvóta bude doplněna v xx:xx:xx. -nebo- Mimo kvótu šířky pásma. Kvóta bude doplněna v xx:xx:xx. |
jsonp | Hodnota parametru zpětného volání je neplatná (obsahuje nesprávné znaky) | CallbackParameterInvalid | Hodnota parametru zpětného volání {callback-parameter-name} není platný identifikátor JavaScriptu. |
ip-filter | Nepodařilo se analyzovat IP adresu volajícího z požadavku. | FailedToParseCallerIP | Nepodařilo se navázat IP adresu volajícího. Přístup se odepřel. |
ip-filter | IP adresa volajícího není v seznamu povolených | CallerIpNotAllowed | IP adresa volajícího {ip-adresa} není povolená. Přístup se odepřel. |
ip-filter | IP adresa volajícího je v seznamu blokovaných | CallerIpBlocked | IP adresa volajícího je zablokovaná. Přístup se odepřel. |
check-header | Chybí požadovaná hlavička nebo chybí hodnota. | HeaderNotFound | Hlavička {header-name} nebyla v požadavku nalezena. Přístup se odepřel. |
check-header | Chybí požadovaná hlavička nebo chybí hodnota. | HeaderValueNotAllowed | Hodnota záhlaví {header-name} pro {header-value} není povolená. Přístup se odepřel. |
validate-jwt | V požadavku chybí token Jwt | TokenNotPresent | JWT neexistuje. |
validate-jwt | Ověření podpisu se nezdařilo. | TokenSignatureInvalid | <zpráva z knihovny> jwt. Přístup se odepřel. |
validate-jwt | Neplatná cílová skupina | TokenAudienceNotAllowed | <zpráva z knihovny> jwt. Přístup se odepřel. |
validate-jwt | Neplatný vystavitel | TokenIssuerNotAllowed | <zpráva z knihovny> jwt. Přístup se odepřel. |
validate-jwt | Vypršela platnost tokenu. | TokenExpired | <zpráva z knihovny> jwt. Přístup se odepřel. |
validate-jwt | Klíč podpisu se nepřeložil podle ID. | TokenSignatureKeyNotFound | <zpráva z knihovny> jwt. Přístup se odepřel. |
validate-jwt | V tokenu chybí požadované deklarace identity. | TokenClaimNotFound | Token JWT chybí následující deklarace identity: <c1>, <c2>, ... Přístup se odepřel. |
validate-jwt | Neshoda hodnot deklarací identity | TokenClaimValueNotAllowed | Deklarací identity {název_deklarace} není povolená hodnota {claim-value}. Přístup se odepřel. |
validate-jwt | Další chyby ověřování | JwtInvalid | <message from jwt library> |
forward-request or send-request | Stavový kód odpovědi HTTP a hlavičky nebyly přijaty z back-endu v rámci nakonfigurovaného časového limitu. | Timeout | vícenásobné |
Nastavení zásad rozhraní API na:
<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>
a odeslání neoprávněného požadavku způsobí následující odpověď:
Další informace o práci se zásadami najdete v tématech:
- Kurz: Transformace a ochrana rozhraní API
- Referenční informace o zásadách pro úplný seznam prohlášení o zásadách a jejich nastavení
- Výrazy zásad
- Nastavení nebo úprava zásad
- Opakované použití konfigurací zásad
- Úložiště fragmentů zásad
- Sada nástrojů zásad služby Azure API Management
- Vytváření zásad pomocí Microsoft Copilotu v Azure