Anforderung senden

GILT FÜR: Alle API Management-Ebenen

Die send-request-Richtlinie sendet die bereitgestellte Anforderung an die angegebene URL und wartet nicht länger, als durch den Zeitüberschreitungswert festgelegt ist.

Hinweis

Legen Sie die Elemente und untergeordneten Elemente einer Richtlinie in der Reihenfolge fest, die in der Richtlinienanweisung angegeben ist. Erfahren Sie mehr darüber, wie Sie API Management-Richtlinien festlegen oder bearbeiten.

Richtlinienanweisung

<send-request mode="new | copy" response-variable-name="" timeout="60 sec" ignore-error
="false | true">
  <set-url>request URL</set-url>
  <set-method>...</set-method>
  <set-header>...</set-header>
  <set-body>...</set-body>
  <authentication-certificate thumbprint="thumbprint" />
  <proxy>...</proxy>
</send-request>

Attribute

Attribut BESCHREIBUNG Erforderlich Standard
Modus Bestimmt, ob es sich um eine new-Anforderung oder eine copy von Header und Text in der aktuellen Anforderung handelt. Im Abschnitt für ausgehende Richtlinien initialisiert mode=copy den Anforderungstext nicht. Richtlinienausdrücke sind zulässig. Nein new
response-variable-name Der Name der Kontextvariable, die ein Antwortobjekt empfängt. Wenn die Variable nicht vorhanden ist, wird sie bei erfolgreicher Ausführung der Richtlinie erstellt und ist dann über die Sammlung context.Variable zugänglich. Richtlinienausdrücke sind zulässig. Ja
timeout Das Zeitüberschreitungsintervall in Sekunden, bis für den Aufruf der URL ein Fehler auftritt. Richtlinienausdrücke sind zulässig. Nein 60
ignore-error Wenn dies auf true festgelegt ist und die Anforderung zu einem Fehler führt, wird der Fehler ignoriert, und die Antwortvariable enthält einen NULL-Wert. Richtlinienausdrücke sind nicht zulässig. Nein false

Elemente

Element BESCHREIBUNG Erforderlich
set-url Die URL der Anforderung. Richtlinienausdrücke sind zulässig. Nein, wenn mode=copy, andernfalls ja.
set-method Legt die Methode der Anforderung fest. Richtlinienausdrücke sind nicht zulässig. Nein, wenn mode=copy, andernfalls ja.
set-header Legt einen Header in der Anforderung fest. Verwenden Sie mehrere set-header-Elemente für mehrere Anforderungsheader. Nein
set-body Legt den Text der Anforderung fest. Nein
authentication-certificate Zertifikat für die Clientauthentifizierung, angegeben in einem thumbprint-Attribut. Nein
proxy Leitet Anforderungen über den HTTP-Proxy weiter. Nein

Verwendung

Hinweise zur Verwendung

Wenn Ihre API Management-Instanz in einem VNET im internen Modus bereitgestellt (eingefügt) wird und Sie diese Richtlinie verwenden, um eine API-Anforderung an eine API zu senden, die in der gleichen API Management-Instanz verfügbar gemacht wird, tritt möglicherweise ein Timeout mit einem HTTP 500 Back-EndConnectionFailure-Fehler auf. Dies ist das Ergebnis einer Azure Load Balancer-Einschränkung.

Damit API-Anforderungen in diesem Szenario mit dem Gateway verkettet werden, konfigurieren Sie set-url so, dass die Localhost-Loopback-URL https://127.0.0.1 verwendet wird. Legen Sie zusätzlich den HOST-Header fest, um den Gatewayhost dieser API Management-Instanz anzugeben. Sie können den Standardhost azure-api.net oder Ihren benutzerdefinierten Domänenhost verwenden. Beispiel:

<send-request>
     <set-url>https://127.0.0.1/myapi/myoperation</set-url>
     <set-header name="Host">
         <value>myapim.azure-api.net</value>
     </set-header>
</send-request>

Weitere Informationen finden Sie in diesem Blogbeitrag.

Beispiel

In diesem Beispiel ist eine Möglichkeit dargestellt, wie Sie ein Verweistoken mit einem Autorisierungsserver überprüfen können. Weitere Informationen zu diesem Beispiel finden Sie unter Verwenden externer Dienste über den Azure API Management-Dienst.

<inbound>
  <!-- Extract token from Authorization header parameter -->
  <set-variable name="token" value="@(context.Request.Headers.GetValueOrDefault("Authorization","scheme param").Split(' ').Last())" />

  <!-- Send request to Token Server to validate token (see RFC 7662) -->
  <send-request mode="new" response-variable-name="tokenstate" timeout="20" ignore-error="true">
    <set-url>https://microsoft-apiappec990ad4c76641c6aea22f566efc5a4e.azurewebsites.net/introspection</set-url>
    <set-method>POST</set-method>
    <set-header name="Authorization" exists-action="override">
      <value>basic dXNlcm5hbWU6cGFzc3dvcmQ=</value>
    </set-header>
    <set-header name="Content-Type" exists-action="override">
      <value>application/x-www-form-urlencoded</value>
    </set-header>
    <set-body>@($"token={(string)context.Variables["token"]}")</set-body>
  </send-request>

  <choose>
        <!-- Check active property in response -->
        <when condition="@((bool)((IResponse)context.Variables["tokenstate"]).Body.As<JObject>()["active"] == false)">
            <!-- Return 401 Unauthorized with http-problem payload -->
            <return-response>
                <set-status code="401" reason="Unauthorized" />
                <set-header name="WWW-Authenticate" exists-action="override">
                    <value>Bearer error="invalid_token"</value>
                </set-header>
            </return-response>
        </when>
    </choose>
  <base />
</inbound>

Weitere Informationen zum Arbeiten mit Richtlinien finden Sie hier: