Skicka begäran

GÄLLER FÖR: Alla API Management-nivåer

Principen send-request skickar den angivna begäran till den angivna URL:en och väntar inte längre än det angivna tidsgränsvärdet.

Kommentar

Ange principens element och underordnade element i den ordning som anges i principbeskrivningen. Läs mer om hur du anger eller redigerar API Management-principer.

Principuttryck

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

Attribut

Attribut beskrivning Obligatoriskt Standardvärde
läge Avgör om det här är en new begäran eller en copy av rubrikerna och brödtexten i den aktuella begäran. I avsnittet mode=copy utgående princip initierar inte begärandetexten. Principuttryck tillåts. Nej new
response-variable-name Namnet på kontextvariabeln som ska ta emot ett svarsobjekt. Om variabeln inte finns skapas den vid en lyckad körning av principen och blir tillgänglig via context.Variable samling. Principuttryck tillåts. Ja Ej tillämpligt
timeout Tidsgränsintervallet i sekunder innan anropet till URL:en misslyckas. Principuttryck tillåts. Nej 60
ignore-error Om true och begäran resulterar i ett fel ignoreras felet och svarsvariabeln innehåller ett null-värde. Principuttryck tillåts inte. Nej false

Element

Element Description Obligatoriskt
set-url URL:en för begäran. Principuttryck tillåts. Nej om mode=copy; annars ja.
set-method Anger metoden för begäran. Principuttryck tillåts inte. Nej om mode=copy; annars ja.
set-header Anger ett huvud i begäran. Använd flera set-header element för flera begärandehuvuden. Nej
set-body Anger brödtexten för begäran. Nej
authentication-certificate Certifikat som ska användas för klientautentisering, som anges i ett thumbprint attribut. Nej
Proxy Routningsbegäran via HTTP-proxy. Nej

Användning

Användningsanteckningar

Om din API Management-instans distribueras (matas in) i ett virtuellt nätverk i internt läge och du använder den här principen för att skicka en API-begäran till ett API som exponeras i samma API Management-instans kan det uppstå en timeout med ett HTTP 500-serverdelsfel Anslut ionFailure-fel. Detta är resultatet av en begränsning för Azure Load Balancer.

Om du vill länka API-begäranden till gatewayen i det här scenariot konfigurerar du set-url för att använda localhost-loopback-URL:en https://127.0.0.1. Ange dessutom HOST huvudet för att ange den här API Management-instansens gatewayvärd. Du kan använda standardvärden azure-api.net eller den anpassade domänvärden. Till exempel:

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

Mer information finns i detta blogginlägg.

Exempel

Det här exemplet visar ett sätt att verifiera en referenstoken med en auktoriseringsserver. Mer information om det här exemplet finns i Använda externa tjänster från Azure API Management-tjänsten.

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

Mer information om hur du arbetar med principer finns i: