Felhantering i API Management-principer

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 .

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:

Skärmbild som visar svaret på exemplet, som innehåller ett felmeddelande.

Mer information om hur du arbetar med principer finns i: