Fehlerbehandlung bei API Management-Richtlinien

GILT FÜR: Alle API Management-Ebenen

Durch die Bereitstellung eines ProxyError Azure API Management-Objekts können Herausgeber auf Fehlerbedingungen reagieren, die während der Verarbeitung von Anforderungen auftreten können. Auf das ProxyError Objekt wird über die Eigenschaft context.LastError zugegriffen. Richtlinien im on-error Richtlinienabschnitt können das ProxyError Objekt verwenden. Dieser Artikel dient als Referenz für die Fehlerbehandlungsfunktionen in Azure API Management.

Fehlerbehandlung in API Management

Die Richtlinien in Azure API Management sind in die Abschnitte inbound, backend, outbound und on-error unterteilt, wie im folgenden Beispiel gezeigt.

<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>

Während der Verarbeitung einer Anforderung werden integrierte Schritte zusammen mit allen Richtlinien ausgeführt, die für die Anforderung gelten. Wenn ein Fehler auftritt, wechselt die Verarbeitung sofort zum Richtlinienabschnitt on-error.

Der Richtlinienabschnitt on-error kann in jedem Bereich verwendet werden. API-Herausgeber können benutzerdefiniertes Verhalten konfigurieren, z. B. das Protokollieren des Fehlers bei Azure Event Hubs oder das Erstellen einer neuen Antwort, um zum Aufrufer zurückzukehren.

Hinweis

Der on-error Abschnitt ist standardmäßig nicht in Richtlinien vorhanden. Um einer Richtlinie den Abschnitt on-error hinzuzufügen, navigieren Sie im Richtlinien-Editor zur gewünschten Richtlinie, und fügen Sie sie hinzu. Weitere Informationen zum Konfigurieren von Richtlinien finden Sie unter Richtlinien in API Management.

Wenn kein on-error Abschnitt vorhanden ist, erhalten Anrufer 400 oder 500 HTTP-Antwortmeldungen, wenn eine Fehlerbedingung auftritt.

Im On-error-Abschnitt zulässige Richtlinien

Die folgenden Richtlinien können im Richtlinienabschnitt on-error verwendet werden.

lastError

Wenn ein Fehler auftritt und die Kontrolle zum on-error Richtlinienabschnitt springt, wird der Fehler in der LastError-Eigenschaft des Kontextes gespeichert. Die Richtlinien im -Abschnitt können auf zugreifen. LastError hat die folgenden Eigenschaften.

Name Typ Beschreibung Erforderlich
Source Zeichenfolge Name des Elements, bei dem der Fehler aufgetreten ist. Kann entweder der Schrittname einer Richtlinie oder einer integrierten Pipeline sein. Ja
Reason Zeichenfolge Computerfreundlicher Fehlercode, der bei der Fehlerbehandlung verwendet werden kann. Nein
Message Zeichenfolge Für Menschen lesbare Fehlerbeschreibung. Ja
Scope Zeichenfolge Name des Bereichs, in dem der Fehler aufgetreten ist. Nein
Section Zeichenfolge Name des Abschnitts, in dem der Fehler aufgetreten ist. Mögliche Werte: inbound, backend, outboundoder on-error. Nein
Path Zeichenfolge Gibt eine geschachtelte Richtlinienhierarchie an, z. B choose[3]\\when[2]. . Mehrere Instanzen einer geschachtelten Richtlinie werden beginnend bei 1 indexiert. Nein
PolicyId Zeichenfolge Wert des Attributs id, sofern vom Kunden festgelegt, in der Richtlinie, in der der Fehler aufgetreten ist. Nein

Tipp

Sie können den Statuscode über context.Response.StatusCode abrufen.

Hinweis

Alle Richtlinien verfügen über ein optionales id-Attribut, das dem Stammelement der Richtlinie hinzugefügt werden kann. Wenn dieses Attribut in einer Richtlinie vorhanden ist, wenn eine Fehlerbedingung auftritt, können Sie den Wert des Attributs mithilfe der context.LastError.PolicyId Eigenschaft abrufen.

Vordefinierte Fehler für integrierte Schritte

Die folgenden Fehler sind für Fehlerbedingungen, die während der Auswertung der integrierten Verarbeitungsschritte auftreten können, vordefiniert.

Quelle Bedingung Grund Nachricht
Konfiguration Der URI stimmt nicht mit einer API oder einem Vorgang überein. OperationNichtGefunden (OperationNotFound) Eingehende Anforderung kann keinem Vorgang zugeordnet werden.
Autorisierung Abonnementschlüssel nicht bereitgestellt AbonnementschlüsselNichtGefunden Der Zugriff wurde aufgrund eines fehlenden Abonnementschlüssels verweigert. Stellen Sie sicher, dass der Abonnementschlüssel beim Senden von Anforderungen an diese API enthalten ist.
Autorisierung Wert des Abonnementschlüssels ungültig Der Abonnementschlüssel ist ungültig Der Zugriff wurde aufgrund eines ungültigen Abonnementschlüssels verweigert. Stellen Sie sicher, dass Sie einen gültigen Schlüssel für ein aktives Abonnement bereitstellen.
Mehrere Der Client hat eine nachgeschaltete Verbindung (von einem Client zu einem API-Verwaltungsgateway) abgebrochen, während die Anforderung aussteht. Clientverbindungsfehler Mehrere
Mehrere Das Back-End hat den Vorgang abgebrochen oder konnte keine Upstream-Verbindung herstellen (vom API-Management-Gateway zu einem Back-End-Dienst) Backend-Verbindungsfehler Mehrere
Mehrere Während der Auswertung eines bestimmten Ausdrucks ist eine Laufzeitausnahme aufgetreten ExpressionValueEvaluationFailure Mehrere

Vordefinierte Fehler für Richtlinien

Die folgenden Fehler sind für Fehlerbedingungen vordefiniert, die bei der Richtlinienauswertung auftreten können.

Quelle Bedingung Grund `Message`
Ratenbegrenzung Ratenlimit überschritten Ratenbegrenzung überschritten Das Rate-Limit wurde überschritten.
Kontingent Kontingent überschritten Kontingentüberschreitung Das Aufrufvolumenkontigent ist erschöpft. Das Kontingent wird in xx:xx:xx aufgefüllt. –oder– Das Bandbreitenkontingent ist erschöpft. Das Kontingent wird in xx:xx:xx aufgefüllt.
jsonp Wert des Rückrufparameters ungültig (enthält falsche Zeichen) Ungültiger Rückrufparameter Der Wert des Rückrufparameters {callback-parameter-name} ist kein gültiger JavaScript-Bezeichner.
IP-Filter Fehler beim Parsen der IP-Adresse des Aufrufers aus Anforderung FailedToParseCallerIP Fehler beim Ermitteln der IP-Adresse des Aufrufers. Der Zugriff wurde verweigert.
IP-Filter Anrufer-IP ist in der Liste zulässiger Adressen nicht enthalten CallerIpNotAllowed Die IP-Adresse des Aufrufers {Ip-Adresse} ist nicht zulässig. Der Zugriff wurde verweigert.
IP-Filter IP-Adresse des Aufrufers in Liste blockierter IP-Adressen Anrufer-IP blockiert Die IP-Adresse des Aufrufers ist blockiert. Der Zugriff wurde verweigert.
Check-Header Erforderlicher Header nicht angegeben oder Wert fehlt HeaderNichtGefunden Header {header-name} wurde nicht in der Anforderung gefunden. Der Zugriff wurde verweigert.
check-header Erforderlicher Header nicht angegeben oder Wert fehlt HeaderwertNichtZulässig Der Wert {header-value} des Headers {header-name} ist nicht zulässig. Der Zugriff wurde verweigert.
Validieren von JWT JSON-Webtoken (JWT) fehlt in der Anforderung TokenNichtVorhanden JWT ist nicht vorhanden.
Validieren von JWT Fehler bei der Signaturüberprüfung TokenSignaturUngültig <Meldung der JWT-Bibliothek>. Der Zugriff wurde verweigert.
Validieren von JWT Ungültige Zielgruppe TokenAudienceNotAllowed <Meldung der JWT-Bibliothek>. Der Zugriff wurde verweigert.
Validieren von JWT Ungültiger Aussteller TokenIssuerNotAllowed <Meldung der JWT-Bibliothek>. Der Zugriff wurde verweigert.
Validieren von JWT Token abgelaufen Token abgelaufen <Meldung der JWT-Bibliothek>. Der Zugriff wurde verweigert.
Validieren von JWT Signaturschlüssel wurde nicht von ID aufgelöst TokenSignatureKeyNotFound <Meldung der JWT-Bibliothek>. Der Zugriff wurde verweigert.
Validieren von JWT Erforderliche Ansprüche aus Token fehlen TokenClaimNichtGefunden JWT fehlen die folgenden Claims: <c1>, <c2>, ... Der Zugriff wurde verweigert.
Validieren von JWT Abweichung bei Anspruchswerten TokenanspruchswertNichtZulässig Der Wert {claim-value} des Anspruchs {claim-name} ist nicht zulässig. Der Zugriff wurde verweigert.
Validieren von JWT Andere Überprüfungsfehler JWT ungültig <Meldung der JWT-Bibliothek>
forward-request oder send-request HTTP-Antwortstatuscode und Header wurden innerhalb des konfigurierten Timeouts nicht vom Back-End empfangen. Timeout Mehrere

Beispiel

Legen Sie eine API-Richtlinie auf den folgenden Wert fest:

<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>

Das Senden einer nicht autorisierten Anforderung führt zu der folgenden Antwort:

Der Screenshot zeigt die Antwort auf das Beispiel, das eine Fehlermeldung enthält.

Weitere Informationen zum Arbeiten mit Richtlinien finden Sie hier: