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. |
Sì | 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
- Sezioni del criterio: inbound, outbound, backend, on-error
- Ambiti del criterio: globale, area di lavoro, prodotto, API, operazione
- Gateway: dedicato, a consumo, self-hosted, area di lavoro
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>
Criteri correlati
Contenuto correlato
Per ulteriori informazioni sull'utilizzo dei criteri, vedere:
- Esercitazione: trasformare e proteggere l'API
- Informazioni di riferimento sui criteri per un elenco completo delle istruzioni dei criteri e delle relative impostazioni
- Espressioni di criteri
- Impostare o modificare criteri
- Riutilizzare le configurazioni dei criteri
- Repository dei frammenti di criteri
- Creare criteri usando Microsoft Copilot in Azure