Delen via


Aanvraag verzenden

VAN TOEPASSING OP: Alle API Management-lagen

Het send-request beleid verzendt de opgegeven aanvraag naar de opgegeven URL en wacht niet langer dan de time-outwaarde van de set.

Notitie

Stel de elementen en onderliggende elementen van het beleid in de volgorde in die in de beleidsverklaring is opgegeven. Meer informatie over het instellen of bewerken van API Management-beleid.

Beleidsinstructie

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

Kenmerken

Kenmerk Beschrijving Vereist Standaardinstelling
modus Bepaalt of dit een new aanvraag of een copy van de headers en hoofdtekst in de huidige aanvraag is. In de sectie mode=copy Uitgaand beleid wordt de aanvraagbody niet geïnitialiseerd. Beleidsexpressies zijn toegestaan. Nee new
response-variable-name De naam van de contextvariabele die een antwoordobject ontvangt. Als de variabele niet bestaat, wordt deze gemaakt na een geslaagde uitvoering van het beleid en wordt deze toegankelijk via context.Variable verzameling. Beleidsexpressies zijn toegestaan. Ja N.v.t.
timeout Het time-outinterval in seconden voordat de aanroep naar de URL mislukt. Beleidsexpressies zijn toegestaan. Nee 60
ignore-error Als true en de aanvraag resulteert in een fout, wordt de fout genegeerd en bevat de antwoordvariabele een null-waarde. Beleidsexpressies zijn niet toegestaan. Nee false

Elementen

Element Beschrijving Vereist
set-URL De URL van de aanvraag. Beleidsexpressies zijn toegestaan. Nee, anders mode=copyja.
set-method Hiermee stelt u de methode van de aanvraag in. Beleidsexpressies zijn niet toegestaan. Nee, anders mode=copyja.
set-header Hiermee stelt u een header in de aanvraag in. Gebruik meerdere set-header elementen voor meerdere aanvraagheaders. Nee
set-body Hiermee stelt u de hoofdtekst van de aanvraag in. Nee
verificatiecertificaat Certificaat dat moet worden gebruikt voor clientverificatie, opgegeven in een thumbprint kenmerk. Nee
proxy Routeert aanvraag via HTTP-proxy. Nee

Gebruik

Gebruiksnotities

Als uw API Management-exemplaar is geïmplementeerd (geïnjecteerd) in een VNet in de interne modus en u dit beleid gebruikt om een API-aanvraag te verzenden naar een API die wordt weergegeven in hetzelfde API Management-exemplaar, kan er een time-out optreden met een HTTP 500 BackendConnectionFailure-fout. Dit is het resultaat van een beperking van Azure Load Balancer.

Als u API-aanvragen wilt koppelen aan de gateway in dit scenario, configureert u set-url voor het gebruik van de localhost-loopback-URL https://127.0.0.1. Stel bovendien de header in om de HOST gatewayhost van dit API Management-exemplaar op te geven. U kunt de standaardinstelling azure-api.net of uw aangepaste domeinhost gebruiken. Voorbeeld:

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

Zie dit blogbericht voor meer informatie.

Opmerking

In dit voorbeeld ziet u een manier om een referentietoken met een autorisatieserver te verifiëren. Zie Externe services van de Azure API Management-service gebruiken voor meer informatie over dit voorbeeld.

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

Zie voor meer informatie over het werken met beleid: