Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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.
Zpracování chyb ve službě API Management
Zásady ve službě Azure API Management jsou rozdělené na inboundoddíly a backendoutboundon-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.
Zásady povolené v zapnuté chybě
V části zásady je možné použít on-error následující zásady.
- zvolit
- nastavit proměnnou
- find-and-replace
- return-response
- nastavit-záhlaví
- nastavení-metody
- nastavit stav
- 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
PosledníChyba
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.
| Název | Typ | Popis | Povinní účastníci |
|---|---|---|---|
Source |
řetězec | 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 |
řetězec | Strojově přívětivý kód chyby, který se dá použít při zpracování chyb. | Ne |
Message |
řetězec | Popis chyby čitelné člověkem | Ano |
Scope |
řetězec | Název oboru, ve kterém došlo k chybě. | Ne |
Section |
řetězec | Název oddílu, kde došlo k chybě. Možné hodnoty: "příchozí", "backend", "odchozí" nebo "on-error". | Ne |
Path |
řetězec | Určuje vnořenou hierarchii zásad, například "choose[3]\when[2]". Z 1 se indexuje více instancí vnořené zásady. | Ne |
PolicyId |
řetězec | Hodnota atributu id , pokud je určena zákazníkem, v zásadách, kde došlo k chybě |
Ne |
Návod
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.
Předdefinované chyby pro předdefinované kroky
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 | KlíčPředplatnéhoNenalezen | 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á. | Neplatný klíč předplatného | 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. | Selhání připojení klienta | 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é |
Předdefinované chyby pro zásady
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 | Překročen limit | 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. | Nepodařilo se analyzovat IP volajícího | 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 | Volající IP není povolena | 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 | Blokována IP adresa volajícího | IP adresa volajícího je zablokovaná. Přístup se odepřel. |
| zkontrolovat záhlaví | Chybí požadovaná hlavička nebo chybí hodnota. | HlavičkaNenalezena | Hlavička {header-name} nebyla v požadavku nalezena. Přístup se odepřel. |
| zkontrolovat záhlaví | Chybí požadovaná hlavička nebo chybí hodnota. | Hodnota záhlaví není povolena | Hodnota záhlaví {header-name} pro {header-value} není povolená. Přístup se odepřel. |
| validate-jwt | V požadavku chybí JWT | Token není přítomen | JWT neexistuje. |
| validate-jwt | Ověření podpisu se nezdařilo. | NeplatnýPodpisTokenu | <zpráva z knihovny> jwt. Přístup se odepřel. |
| validate-jwt | Neplatná cílová skupina | Posluchači tokenu nejsou povoleni | <zpráva z knihovny> jwt. Přístup se odepřel. |
| validate-jwt | Neplatný vystavitel | Vydavatel tokenů není povolen | <zpráva z knihovny> jwt. Přístup se odepřel. |
| validate-jwt | Vypršela platnost tokenu. | Platnost tokenu vypršela | <zpráva z knihovny> jwt. Přístup se odepřel. |
| validate-jwt | Klíč podpisu se nepřeložil podle ID. | KlíčPodpisuTokenuNenalezen | <zpráva z knihovny> jwt. Přístup se odepřel. |
| validate-jwt | V tokenu chybí požadované deklarace identity. | NárokNaTokenNenalezen | Chybí následující nároky: <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 | <zpráva z knihovny jwt> |
| přeposlat žádost nebo odeslat žádost | Stavový kód odpovědi HTTP a hlavičky nebyly přijaty z back-endu v rámci nakonfigurovaného časového limitu. | Přerušení zápasu | vícenásobné |
Příklad
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ěď:
Související obsah
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
- Úložiště dětského hřiště zásad
- Sada nástrojů zásad služby Azure API Management
- Získejte asistenci Copilotu při vytváření, vysvětlování a řešení problémů se zásadami.