Definir corpo
APLICA-SE A: todas as camadas do Gerenciamento de API
Utilize a política set-body
para definir o corpo da mensagem para uma solicitação ou resposta. Para acessar o corpo da mensagem, você pode usar a propriedade context.Request.Body
ou a context.Response.Body
, dependendo da seção em que a política está: de entrada ou de saída.
Importante
Por padrão, quando você acessa o corpo da mensagem usando context.Request.Body
ou context.Response.Body
, o corpo da mensagem original é perdido e deve ser definido por meio do retorno do corpo de volta na expressão. Para preservar o conteúdo do corpo, defina o parâmetro preserveContent
para true
ao acessar a mensagem. Se preserveContent
é definido para true
e um corpo diferente é retornado pela expressão, o corpo retornado é usado.
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
<set-body template="liquid" xsi-nil="blank | null" parse-date="true | false">
new body value as text
</set-body>
Atributos
Atributo | Descrição | Obrigatório | Padrão |
---|---|---|---|
template | Usado para alterar o modo de modelagem no qual a política set-body será executada. Atualmente, o único valor aceito é:- liquid – a política set-body usará o mecanismo de modelagem líquida |
Não | N/D |
xsi-nil | Usado para controlar como os elementos marcados com xsi:nil="true" são representados em conteúdo XML. Defina um dos valores a seguir:- blank - nil é representado com uma cadeia de caracteres vazia.- null - nil é representado com um valor nulo.Expressões de política não são permitidas. |
Não | blank |
parse-date | Booliano. Especifica se as cadeias de caracteres formatadas por data (por exemplo, "/Date(1198908717056)/" ) "2012-03-21T05:40Z" são analisadas para System.DateTime (mm/dd/yyyy hh:mm:ss ). Quando definido como false , os valores de data são simplesmente copiados.Expressões de política não são permitidas. |
Não | true |
Para acessar informações sobre a solicitação e a resposta, o modelo Líquido pode ser associado a um objeto de contexto com as seguintes propriedades:
context. Request. Url Method OriginalMethod OriginalUrl IpAddress MatchedParameters HasBody ClientCertificates Headers Response. StatusCode Method Headers Url. Scheme Host Port Path Query QueryString ToUri ToString OriginalUrl. Scheme Host Port Path Query QueryString ToUri ToString
Uso
- Seções de política: entrada, saída, back-end
- Escopos de política: global, espaço de trabalho, produto, API, operação
- Gateways: clássico, v2, consumo, auto-hospedado, espaço de trabalho
Observações de uso
- Se você estiver usando a política
set-body
para retornar um corpo novo ou atualizado, você não precisará definirpreserveContent
paratrue
porque você estará fornecendo explicitamente o novo conteúdo do corpo. - Preservar o conteúdo de uma resposta no pipeline de entrada não faz sentido, porque ainda não há nenhuma resposta.
- Preservar o conteúdo de uma solicitação no pipeline de saída não faz sentido porque nesse momento a solicitação já foi enviada para o back-end.
- Se essa política é usada quando não há nenhum corpo da mensagem, por exemplo em um
GET
de entrada, uma exceção é lançada.
Para obter mais informações, consulte as seções context.Request.Body
, context.Response.Body
e IMessageBody
na tabela context.Request.Body
.
Usando modelos Líquidos com o corpo definido
A política set-body
pode ser configurada para usar a linguagem de modelagem set-body
para transformar o corpo de uma solicitação ou resposta. Isso poderá ser eficaz se você precisar remodelar por completo o formato da mensagem.
Importante
A implementação de Líquido usado na política set-body
é configurada no “modo C#”. Isso é particularmente importante ao executar ações como filtragem. Por exemplo, o uso de um filtro de data exige o uso de maiúsculas Pascal e da formatação das datas do C#, por exemplo:
{{body.foo.startDateTime| Date:"yyyyMMddTHH:mm:ssZ"}}
Importante
Para associar corretamente a um corpo XML usando o modelo Líquido, use uma política set-header
para definir Content-Type como application/xml, text/xml (ou qualquer tipo que termina com +xml); para um corpo JSON, ele deve ser application/json, text/json (ou qualquer tipo que termina com +json).
Importante
Os modelos Liquid usam o corpo da solicitação/resposta no pipeline de execução atual como entrada. Por esse motivo, os modelos Liquid não funcionam quando usados dentro de uma política de retorno-resposta. Uma política de retorno-resposta cancela o pipeline de execução atual e remove o corpo da solicitação/resposta. Como resultado, qualquer modelo Liquid usado dentro da resposta de retorno receberá uma cadeia de caracteres vazia como entrada e não produzirá a saída esperada.
Filtros do Liquid com suporte
Os filtros do Liquid a seguir têm suporte na política set-body
. Para obter exemplos de filtro, confira a Documentação do Liquid.
Observação
A política requer o uso de maiúsculas e minúsculas Pascal para os nomes de filtro do Liquid (por exemplo, "AtLeast" em vez de "at_least").
- Abs
- Acrescentar
- AtLeast
- AtMost
- Capitalize
- Compacto
- Moeda
- Data
- Padrão
- DividedBy
- Downcase
- Escape
- Primeiro
- H
- Join
- Último
- Lstrip
- Mapeamento
- Minus
- Módulo
- NewlineToBr
- Plus
- Prepend
- Remover
- RemoveFirst
- Substitua
- ReplaceFirst
- Round
- Rstrip
- Tamanho
- Fatia
- Classificar
- Divisão
- Strip
- StripHtml
- StripNewlines
- Horas
- Truncate
- TruncateWords
- Uniq
- Upcase
- UrlDecode
- UrlEncode
Exemplos
Texto literal
<set-body>Hello world!</set-body>
Acessar o corpo como uma cadeia de caracteres
Estamos preservando o corpo da solicitação original, de modo que possamos acessá-lo mais tarde no pipeline.
<set-body>
@{
string inBody = context.Request.Body.As<string>(preserveContent: true);
if (inBody[0] =='c') {
inBody[0] = 'm';
}
return inBody;
}
</set-body>
Acessar o corpo como um JObject
Como não estamos preservando o corpo da solicitação original, acessá-lo mais tarde no pipeline resultará em uma exceção.
<set-body>
@{
JObject inBody = context.Request.Body.As<JObject>();
if (inBody.attribute == <tag>) {
inBody[0] = 'm';
}
return inBody.ToString();
}
</set-body>
Resposta de filtro com base no produto
Este exemplo mostra como executar a filtragem de conteúdo removendo elementos de dados da resposta recebida de um serviço de back-end ao usar o produto Starter
. A resposta de back-end de exemplo inclui propriedades de nível de raiz semelhantes à API de chamada OpenWeather One.
<!-- Copy this snippet into the outbound section to remove a number of data elements from the response received from the backend service based on the name of the product -->
<choose>
<when condition="@(context.Response.StatusCode == 200 && context.Product.Name.Equals("Starter"))">
<set-body>@{
var response = context.Response.Body.As<JObject>();
foreach (var key in new [] {"current", "minutely", "hourly", "daily", "alerts"}) {
response.Property (key).Remove ();
}
return response.ToString();
}
</set-body>
</when>
</choose>
Converter JSON em SOAP usando um modelo Líquido
<set-body template="liquid">
<soap:Envelope xmlns="http://tempuri.org/" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<GetOpenOrders>
<cust>{{body.getOpenOrders.cust}}</cust>
</GetOpenOrders>
</soap:Body>
</soap:Envelope>
</set-body>
Transformar JSON usando um modelo Líquido
<set-body template="liquid">
{
"order": {
"id": "{{body.customer.purchase.identifier}}",
"summary": "{{body.customer.purchase.orderShortDesc}}"
}
}
</set-body>
Acessar o corpo como dados de formulário codificados em URL
O exemplo a seguir usa a expressão AsFormUrlEncodedContent()
para acessar o corpo da solicitação como dados de formulário codificados em URL (tipo de conteúdo application/x-www-form-urlencoded
) e, em seguida, o converte em JSON. Como não estamos preservando o corpo da solicitação original, acessá-lo mais tarde no pipeline resultará em uma exceção.
<set-body>
@{
var inBody = context.Request.Body.AsFormUrlEncodedContent();
return JsonConvert.SerializeObject(inBody);
}
</set-body>
Acessar e retornar o corpo como dados de formulário codificados em URL
O exemplo a seguir usa a AsFormUrlEncodedContent()
expressão para acessar o corpo da solicitação como dados de formulário codificados em URL (tipo de conteúdo application/x-www-form-urlencoded
), adiciona dados ao conteúdo e retorna dados de formulário codificados em URL. Como não estamos preservando o corpo da solicitação original, acessá-lo mais tarde no pipeline resultará em uma exceção.
<set-body>
@{
var body = context.Request.Body.AsFormUrlEncodedContent();
body["newKey"].Add("newValue");
return body.ToFormUrlEncodedContent();
}
</set-body>
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
- Kit de ferramentas de políticas do Gerenciamento de API do Azure
- Criar políticas usando o Microsoft Copilot no Azure