Condividi tramite


Invia la richiesta

SI APPLICA A: Tutti i livelli di Gestione API

Il criterio send-request invia la richiesta fornita all'URL specificato, attendendo non oltre il valore di timeout impostato.

Nota

Impostare gli elementi e gli elementi figlio del criterio nell'ordine specificato nell'istruzione del criterio. Altre informazioni su come impostare o modificare i criteri di API Management.

Istruzione del criterio

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

Attributi

Attributo Descrizione Richiesto Valore predefinito
mode Determina se si tratta di una richiesta new o di copy delle intestazioni e del corpo nella richiesta corrente. Nella sezione criteri in uscita mode=copy non inizializza il corpo della richiesta. Le espressioni di criteri sono consentite. No new
response-variable-name Il nome della variabile di contesto che riceverà un oggetto risposta. Se la variabile non esiste, verrà creata in caso di completamento dell'esecuzione del criterio e diventerà accessibile tramite la raccolta context.Variable. Le espressioni di criteri sono consentite. N/D
timeout Intervallo di timeout in secondi prima che la chiamata all'URL abbia esito negativo. Le espressioni di criteri sono consentite. No 60
ignore-error Se è true e la richiesta restituisce un errore, l'errore verrà ignorato e la variabile di risposta conterrà un valore null. Le espressioni di criteri non sono consentite. No false

Elementi

Elemento Descrizione Richiesto
set-url URL della richiesta. Le espressioni di criteri sono consentite. No se mode=copy; in caso contrario, sì.
set-method Imposta il metodo della richiesta. Le espressioni di criteri non sono consentite. No se mode=copy; in caso contrario, sì.
set-header Imposta un'intestazione nella richiesta. Usare più elementi set-header per più intestazioni di richiesta. No
set-body Imposta il corpo della richiesta. No
authentication-certificate Certificato da usare per l'autenticazione client, specificato in un attributo thumbprint. No
proxy Indirizza la richiesta tramite proxy HTTP. No

Utilizzo

Note sull'utilizzo

Se l'istanza di API Management viene distribuita (inserita) in una rete virtuale in modalità interna e si usa questo criterio per inviare una richiesta API a un'API esposta nella stessa istanza di API Management, è possibile che si verifichi un timeout con un errore HTTP 500 BackendConnectionFailure. Questo è il risultato di una limitazione di Azure Load Balancer.

Per concatenare le richieste API al gateway in questo scenario, configurare set-url per usare l'URL di loopback localhost https://127.0.0.1. Impostare anche l'intestazione HOST per specificare l'host gateway dell'istanza di API Management. È possibile usare l'host di dominio predefinito azure-api.net o personalizzato. Ad esempio:

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

Per ulteriori informazioni, vedi questo post di blog.

Esempio

Questo esempio mostra un metodo per verificare un token di riferimento con un server di autorizzazione. Per altre informazioni relative a questo esempio, vedere Uso di servizi esterni dal servizio Gestione API di 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>

Per ulteriori informazioni sull'utilizzo dei criteri, vedere: