Enviar solicitud
SE APLICA A: todos los niveles de API Management
La directiva send-request
envía la solicitud proporcionada a la dirección URL que se ha especificado, aunque no espera más del valor de tiempo de espera establecido.
Nota:
Establezca los elementos de la directiva y los elementos secundarios en el orden proporcionado en la instrucción de directiva. Obtenga más información sobre el establecimiento o modificación de directivas de API Management.
Instrucción de la directiva
<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>
Atributos
Atributo | Descripción | Necesario | Valor predeterminado |
---|---|---|---|
mode | Determina si se trata de una solicitud new o una copy de los encabezado o cuerpo de la solicitud actual. En la sección Directiva de salida, mode=copy no inicializa el cuerpo de la solicitud. Se permiten expresiones de directiva. |
No | new |
response-variable-name | El nombre de la variable de contexto que va a recibir un objeto de respuesta. Si la variable no existe, se creará tras la ejecución correcta de la directiva y se podrá acceder a ella a través de la colección context.Variable . Se permiten expresiones de directiva. |
Sí | N/D |
timeout | Intervalo de tiempo de espera en segundos antes de que se produzca un error de la llamada a la dirección URL. Se permiten expresiones de directiva. | No | 60 |
ignore-error | Si es true y la solicitud produce un error, el error se omitirá y la variable de respuesta contendrá un valor null. No se permiten expresiones de directiva. |
No | false |
Elementos
Elemento | Descripción | Obligatorio |
---|---|---|
set-url | Dirección URL de la solicitud. Se permiten expresiones de directiva. | No en el caso de mode=copy ; de lo contrario, sí. |
set-method | Establece el método de la solicitud. No se permiten expresiones de directiva. | No en el caso de mode=copy ; de lo contrario, sí. |
set-header | Establece un encabezado en la solicitud. Utilice varios elementos set-header para varios encabezados de solicitud. |
No |
set-body | Establece el cuerpo de la solicitud. | No |
authentication-certificate | Certificado que se va a usar para la autenticación de cliente, especificado en el atributo thumbprint . |
No |
proxy | Enruta la solicitud mediante el proxy HTTP. | No |
Uso
- Secciones de directiva: entrante, saliente, back-end, on-error
- Ámbitos de la directiva: global, área de trabajo, producto, API, operación
- Puertas de enlace: dedicada, consumo y autohospedada y área de trabajo
Notas de uso
Si la instancia de API Management se implementa (inserta) en una red virtual en modo interno y usa esta directiva para enviar una solicitud de API a una API expuesta en la misma instancia de API Management, es posible que encuentre un tiempo de espera con un error HTTP 500 BackendConnectionFailure. Esto se debe a una limitación de Azure Load Balancer.
Para encadenar solicitudes de API a la puerta de enlace en este escenario, configure set-url
para usar la dirección URL https://127.0.0.1
de bucle invertido localhost. Además, establezca el encabezado HOST
para especificar este host de puerta de enlace de la instancia de API Management. Puede usar el valor predeterminado azure-api.net
o el host de dominio personalizado. Por ejemplo:
<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>
Para más información, consulte esta entrada de blog.
Ejemplo
En este ejemplo se muestra una forma de comprobar un token de referencia con un servidor de autorización. Si desea más información sobre este ejemplo, consulte Uso de servicios externos del servicio Azure API Management.
<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>
Directivas relacionadas
Contenido relacionado
Para más información sobre el trabajo con directivas, vea:
- Tutorial: Transformación y protección de una API
- Referencia de directivas para una lista completa de instrucciones de directivas y su configuración
- Expresiones de directiva
- Establecimiento o edición de directivas
- Reutilización de configuraciones de directivas
- Repositorio de fragmentos de código de directiva
- Creación de directivas mediante Microsoft Copilot en Azure