Envoyer la requête

S’APPLIQUE À : Tous les niveaux de Gestion des API

La stratégie send-request envoie la demande fournie à l’URL spécifiée, sans attendre plus longtemps que la valeur du délai d’expiration définie.

Notes

Définissez les éléments enfants et de stratégie dans l’ordre fourni dans l’instruction de stratégie. En savoir plus sur comment définir ou modifier des stratégies du service Gestion des API.

Instruction de la stratégie

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

Attributs

Attribut Description Obligatoire Default
mode Détermine s’il s’agit d’une requête new ou d’une copy des en-têtes et du corps dans la requête actuelle. Dans la section stratégie outbound, mode=copy n’initialise pas le corps de la demande. Les expressions de stratégie sont autorisées. Non new
response-variable-name Nom de la variable contextuelle qui recevra un objet Response. Si la variable n’existe pas, elle est créée après l’exécution réussie de la stratégie, et devient accessible par le biais de la collection context.Variable. Les expressions de stratégie sont autorisées. Oui N/A
délai d'expiration Délai d’expiration en secondes avant l’échec de l’appel à l’URL. Les expressions de stratégie sont autorisées. Non 60
ignore-error Si la valeur est true et que la requête génère une erreur, l’erreur est ignorée et la variable de réponse contient une valeur Null. Les expressions de stratégie ne sont pas autorisées. Non false

Éléments

Élément Description Obligatoire
set-url URL de la demande. Les expressions de stratégie sont autorisées. Non si mode=copy. Dans le cas contraire Oui.
set-method Définit la méthode de la requête. Les expressions de stratégie ne sont pas autorisées. Non si mode=copy. Dans le cas contraire Oui.
set-header Définit un en-tête dans la requête. Utilisez plusieurs éléments set-header pour plusieurs en-tête de requête. Non
set-body Définit le corps de la requête. Non
authentication-certificate Certificat à utiliser pour l’authentification du client, spécifié dans un attribut thumbprint. Non
proxy Demande d’itinéraires via un proxy HTTP. Non

Usage

Notes d’utilisation

Si votre instance d’API Management est déployée (injectée) dans un VNet en mode interne et que vous utilisez cette stratégie pour envoyer une requête d’API à une API exposée dans la même instance d’API Management, vous pouvez rencontrer un délai d’expiration avec une erreur HTTP 500 BackendConnectionFailure. Ceci est le résultat d’une limitation d’Azure Load Balancer.

Pour chaîner les requêtes d’API à la passerelle dans ce scénario, configurez set-url pour utiliser l’URL de bouclage localhost https://127.0.0.1. Définissez également l’en-tête HOST pour spécifier l’hôte de la passerelle de cette instance d’API Management. Vous pouvez utiliser le azure-api.net par défaut ou votre hôte de domaine personnalisé. Par exemple :

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

Pour plus d’informations, voir ce billet de blog.

Exemple

Cet exemple montre un moyen de vérifier un jeton de référence avec un serveur d’autorisation. Pour plus d’informations sur cet exemple, consultez la page Utilisation de services externes à partir du service Gestion des API Azure.

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

Pour plus d’informations sur l’utilisation des stratégies, consultez :