Zpracování chyb v zásadách služby API Management
Poskytnutím objektu ProxyError
azure API Management umožňuje vydavatelům reagovat na chybové stavy, ke kterým může dojít při zpracování požadavků. K ProxyError
objektu se přistupuje prostřednictvím kontextu. Vlastnost LastError a je možné ji používat zásadami v on-error
části zásady. Tento článek obsahuje referenční informace o možnostech zpracování chyb v Azure API Management.
Zpracování chyb v API Management
Zásady v Azure API Management jsou rozdělené na inbound
oddíly , backend
, outbound
a 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í žádosti se předdefinované kroky provádějí spolu se všemi zásadami, které jsou v rozsahu žádosti. Pokud dojde k chybě, zpracování okamžitě přejde do on-error
části zásad.
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 centra událostí nebo vytvoření nové odpovědi, která se vrátí volajícímu.
Poznámka
Oddíl on-error
není ve výchozím nastavení v zásadách. Pokud chcete oddíl přidat on-error
do zásady, přejděte do požadované zásady v editoru zásad a přidejte ho. Další informace o konfiguraci zásad najdete v tématu Zásady v API Management.
Pokud neexistuje žádný on-error
oddíl, volající obdrží zprávy odpovědi HTTP 400 nebo 500, pokud dojde k chybovému stavu.
Zásady povolené v chybě
Následující zásady je možné použít v on-error
části zásady.
- Zvolte
- set-variable
- find-and-replace
- return-response
- set-header
- set-method
- set-status
- send-request
- send-one-way-request
- log-to-eventhub
- json-to-xml
- xml-to-json
- limit-concurrency
- mock-response
- Opakovat
- Trasování
LastError
Když dojde k chybě a řízení přejde do oddílu on-error
zásad, chyba se uloží v kontextu. Vlastnost LastError , ke které můžou mít přístup zásady v části on-error
. LastError má následující vlastnosti.
Název | Typ | Popis | Povinné |
---|---|---|---|
Source |
řetězec | Pojmenuje prvek, u kterého došlo k chybě. Může to být buď zásada, nebo předdefinovaný název kroku kanálu. | Yes |
Reason |
řetězec | Strojově popisný kód chyby, který se dá použít při zpracování chyb. | No |
Message |
řetězec | Popis chyby čitelné pro člověka | Yes |
Scope |
řetězec | Název oboru, ve kterém došlo k chybě, a může být jedním z "globálních", "produktů", "api" nebo "operace". | No |
Section |
řetězec | Název oddílu, kde došlo k chybě Možné hodnoty: "příchozí", "back-end", "odchozí" nebo "on-error". | No |
Path |
řetězec | Určuje vnořené zásady, například "choose[3]/when[2]". | No |
PolicyId |
řetězec | Hodnota atributu id , pokud je zadán zákazníkem, v zásadě, kde došlo k chybě |
No |
Tip
Stavový kód můžete získat přístup 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ě, pokud dojde k chybovému 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é podmínky, 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 neodpovídá žádnému rozhraní API ani operaci. | OperationNotFound | Příchozí požadavek nelze shodovat s operací. |
autorizace | Klíč předplatného se nezadá | 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é. |
multiple | Podřízené připojení (z klienta k bráně API Management) bylo přerušeno klientem během čekání na vyřízení požadavku. | ClientConnectionFailure | multiple |
multiple | Nadřazené připojení (z brány API Management k back-endové službě) nebylo vytvořeno nebo bylo přerušeno back-endem. | Chyba připojení back-endu | multiple |
multiple | Během vyhodnocení konkrétního výrazu došlo k výjimce modulu runtime. | ExpressionValueEvaluationFailure | multiple |
Předdefinované chyby pro zásady
Následující chyby jsou předdefinované pro chybové podmínky, ke kterým může dojít během vyhodnocení zásad.
Zdroj | Podmínka | Důvod | Zpráva |
---|---|---|---|
limit rychlosti | Překročení limitu rychlosti | RateLimitExceeded | Překročení limitu rychlosti |
kvóta | Překročení kvóty | KvótaExceeded | Překročení kvóty volání. Kvóta bude doplněna v xx:xx:xx. -or- 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 | Nepovedlo 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-address} 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 hodnota | HeaderNotFound | Hlavička {header-name} nebyla v požadavku nalezena. Přístup se odepřel. |
check-header | Chybí požadovaná hlavička nebo hodnota | HeaderValueNotAllowed | Hlavička {header-name} hodnoty {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 | Deklarace hodnoty {claim-name} {claim-value} není povolená. Přístup se odepřel. |
validate-jwt | Další chyby ověření | JwtInvalid | <zpráva z knihovny jwt> |
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. | Časový limit | multiple |
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í neautorizované žádosti způsobí následující odpověď:
Další kroky
Další informace o práci se zásadami najdete v tématech:
- Zásady v API Management
- Transformovat rozhraní API
- Referenční informace o zásadách pro úplný seznam prohlášení o zásadách a jejich nastavení
- Ukázky zásad