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
- Seções da política: entrada, saída, back-end, em caso de erro
- Escopos de política: global, espaço de trabalho, produto, API, operação
- Gateways: dedicados, de consumo, auto-hospedados, espaço de trabalho
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.1
de 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>
Políticas relacionadas
Conteúdo relacionado
Para obter mais informações sobre como trabalhar com políticas, consulte:
- Tutorial: Transformar e proteger sua API
- Referência de Política para uma lista completa das instruções de política e suas configurações
- Expressões de política
- Definir ou editar políticas
- Reutilizar configurações de política
- Repositório de snippets de política
- Criar políticas usando o Microsoft Copilot no Azure