Partilhar via


Enviar pedido

APLICA-SE A: Todas as camadas de gerenciamento de API

A send-request política envia a solicitação fornecida para a URL especificada, aguardando não mais do que o valor de tempo limite definido.

Nota

Defina os elementos da política e os elementos filho na ordem fornecida na declaração de política. Saiba mais sobre como definir ou editar políticas de Gerenciamento de API.

Declaração de política

<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 Description Necessário Predefinição
modo Determina se esta é uma new solicitação ou um copy dos cabeçalhos e corpo na solicitação atual. Na seção de política de saída, mode=copy não inicializa o corpo da solicitação. São permitidas expressões de política. Não new
nome-variável-resposta O nome da variável de contexto que receberá um objeto de resposta. Se a variável não existir, ela será criada após a execução bem-sucedida da política e ficará acessível por meio context.Variable de coleta. São permitidas expressões de política. Sim N/A
tempo limite O intervalo de tempo limite em segundos antes da chamada para a URL falhar. São permitidas expressões de política. Não 60
ignorar-erro Se true e a solicitação resultar em um erro, o erro será ignorado e a variável de resposta conterá um valor nulo. Expressões de política não são permitidas. Não false

Elementos

Elemento Description Obrigatório
set-url O URL do pedido. São permitidas expressões de política. Não, caso mode=copycontrário, sim.
método-conjunto Define o método da solicitação. Expressões de política não são permitidas. Não, caso mode=copycontrário, sim.
set-header Define um cabeçalho na solicitação. Use vários set-header elementos para vários cabeçalhos de solicitação. Não
corpo-conjunto Define o corpo da solicitação. Não
certificado-autenticação Certificado a ser usado para autenticação de cliente, especificado em um thumbprint atributo. Não
procuração Solicitação de rotas via proxy HTTP. Não

Utilização

Notas de utilização

Se sua instância de Gerenciamento de API for implantada (injetada) em uma VNet no modo interno e você usar essa política para enviar uma solicitação de API para uma API exposta na mesma instância de Gerenciamento de API, poderá encontrar um tempo limite com um erro HTTP 500 BackendConnectionFailure. Este é o resultado de uma limitação do Azure Load Balancer.

Para encadear solicitações de API ao gateway nesse cenário, configure set-url para usar a URL https://127.0.0.1de loopback localhost . Além disso, defina o cabeçalho para especificar o HOST host de gateway dessa instância de Gerenciamento de API. Você pode usar o padrão azure-api.net ou seu host de domínio personalizado. Por exemplo:

<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 obter mais informações, consulte esta postagem no blog.

Exemplo

Este exemplo mostra uma maneira de verificar um token de referência com um servidor de autorização. Para obter mais informações sobre este exemplo, consulte Usando serviços externos do serviço de Gerenciamento de API do 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>

Para obter mais informações sobre como trabalhar com políticas, consulte: