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

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>

Para más información sobre el trabajo con directivas, vea: