Sdílet prostřednictvím


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.

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.

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ěď:

Neautorizovaná chybová odpověď

Další informace o práci se zásadami najdete v tématech: