Compartilhar via


Enviar solicitação

APLICA-SE A: todas as camadas do Gerenciamento de API

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

Observação

Defina os elementos da política e os elementos filho na ordem fornecida na declaração da política. Saiba mais sobre como definir e editar as 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 Descrição Obrigatório Padrão
mode Determina se esta é uma new solicitação ou uma copy dos cabeçalhos e corpo da solicitação atual. Na seção de política de saída, mode=copy não inicializa o corpo da solicitação. Expressões de política são permitidas. Não new
response-variable-name 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 através da coleção context.Variable. Expressões de política são permitidas. Sim N/D
tempo limite O intervalo de tempo limite em segundos antes de a chamada para a URL falhar. Expressões de política são permitidas. Não 60
ignore-error Se isso for 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 Descrição Obrigatório
set-url A URL da solicitação. Expressões de política são permitidas. Não se mode=copy, caso contrário, sim.
set-method Define o método da solicitação. Expressões de política não são permitidas. Não se mode=copy, caso contrário, sim.
set-header Define um cabeçalho na solicitação. Use vários elementos de set-header para vários cabeçalhos de solicitação. Não
set-body Define o corpo da solicitação. Não
authentication-certificate Certificado a ser usado para autenticação de cliente, especificado em um atributo thumbprint. Não
proxy Solicitação de rotas por meio de proxy HTTP. Não

Uso

Observações de uso

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 Gerenciamento de API, você poderá encontrar um tempo limite com um erro HTTP 500 BackendConnectionFailure. Esse é o resultado de uma limitação do Azure Load Balancer.

Para encadear solicitações de API para o 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 HOST para especificar esse host de gateway da instância Gerenciamento de API. Você pode usar o azure-api.net padrão ou o 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 saber mais, 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 esse exemplo, consulte Uso dos 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: