Definir corpo
APLICA-SE A: Todas as camadas de gerenciamento de API
Use a set-body
política para definir o corpo da mensagem para uma solicitação ou resposta. Para acessar o corpo da mensagem, você pode usar a context.Request.Body
propriedade ou o context.Response.Body
, dependendo se a política está na seção de entrada ou 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 retornando o corpo de volta na expressão. Para preservar o conteúdo do corpo, defina o preserveContent
parâmetro como true
ao acessar a mensagem. Se preserveContent
estiver definido como true
e um corpo diferente for retornado pela expressão, o corpo retornado será usado.
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
<set-body template="liquid" xsi-nil="blank | null" parse-date="true | false">
new body value as text
</set-body>
Atributos
Atributo | Description | Necessário | Predefinição |
---|---|---|---|
aninhado | Usado para alterar o modo de modelagem no qual a set-body política é executada. Atualmente, o único valor suportado é:- liquid - a set-body política utilizará o motor de modelos líquidos |
No | N/A |
XSI-NIL | Usado para controlar como os elementos marcados com xsi:nil="true" são representados em cargas úteis XML. Defina como um dos seguintes valores:- 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 |
data de análise | Booleano. Especifica se as cadeias de caracteres formatadas em data (por exemplo, "/Date(1198908717056)/" "2012-03-21T05:40Z" , ) são analisadas como 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 Liquid pode ser vinculado 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
Utilização
- Seções de política: entrada, saída, back-end
- Âmbitos de política: global, área de trabalho, produto, API, operação
- Gateways: clássico, v2, consumo, auto-hospedado, espaço de trabalho
Notas de utilização
- Se você estiver usando a
set-body
política para retornar um corpo novo ou atualizado, não precisará definirpreserveContent
comotrue
porque está 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á resposta.
- Preservar o conteúdo de uma solicitação no pipeline de saída não faz sentido porque a solicitação já foi enviada para o back-end neste momento.
- Se essa política for usada quando não houver corpo de mensagem, por exemplo, em uma entrada
GET
, uma exceção será lançada.
Para obter mais informações, consulte o context.Request.Body
, context.Response.Body
e as seções na tabela Variável de IMessageBody
contexto.
Usando modelos Liquid com set-body
A set-body
política pode ser configurada para usar a linguagem de modelos Liquid para transformar o corpo de uma solicitação ou resposta. Isso pode ser eficaz se você precisar remodelar completamente o formato da sua mensagem.
Importante
A implementação do Liquid usada na set-body
política é configurada no 'modo C#'. Isto é particularmente importante quando se fazem coisas como filtrar. Por exemplo, o uso de um filtro de data requer o uso de caixa Pascal e formatação de data em C#, por exemplo:
{{body.foo.startDateTime| Data:"yyyyMMddTHH:mm:ssZ"}}
Importante
Para vincular corretamente a um corpo XML usando o modelo Liquid, use uma set-header
política para definir Content-Type como application/xml, text/xml (ou qualquer tipo que termine com +xml); para um corpo JSON, ele deve ser application/json, text/json (ou qualquer tipo que termine com +json).
Importante
Os modelos líquidos usam o corpo de solicitação/resposta no pipeline de execução atual como entrada. Por esse motivo, os modelos líquidos 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 líquido usado dentro do retorno-resposta receberá uma string vazia como sua entrada e não produzirá a saída esperada.
Filtros de líquidos suportados
Os seguintes filtros de líquido são suportados set-body
na política. Para obter exemplos de filtros, consulte a documentação de Líquidos.
Nota
A política requer invólucro Pascal para nomes de filtros líquidos (por exemplo, "AtLeast" em vez de "at_least").
- Abs
- Acrescentar
- AtLeast
- No máximo
- Capitalizar
- Compact
- Moeda
- Date
- Predefinido
- Divididopor:
- Caixa baixa
- Esc
- First
- H
- Participar
- Last
- Lstrip
- Mapa
- Menos
- Módulo
- NewlineToBr
- Sinal de adição
- Pendente
- Remover
- RemoveFirst
- Replace
- SubstituirPrimeiro
- Round
- Rstrip
- Tamanho
- Setor
- Ordenar
- Dividida
- Tira
- StripHtml
- StripNewlines
- Times
- Truncar
- TruncateWords
- Uniq
- Caixa de reposição
- UrlDecode
- UrlEncode
Exemplos
Texto literal
<set-body>Hello world!</set-body>
Acessando o corpo como uma cadeia de caracteres
Estamos preservando o corpo de solicitação original para 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>
Acessando o corpo como um JObject
Como não estamos reservando o corpo de 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>
Filtrar a resposta 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 Starter
produto. O exemplo de resposta de back-end inclui propriedades de nível raiz semelhantes à API de chamada do 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 Liquid
<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 Liquid
<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 por URL
O exemplo a seguir usa a AsFormUrlEncodedContent()
expressão para acessar o corpo da solicitação como dados de formulário codificados por URL (tipo application/x-www-form-urlencoded
de conteúdo) e, em seguida, converte-a em JSON. Como não estamos reservando o corpo de 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 por URL
O exemplo a seguir usa a AsFormUrlEncodedContent()
expressão para acessar o corpo da solicitação como dados de formulário codificados por URL (tipo application/x-www-form-urlencoded
de conteúdo), adiciona dados à carga útil e retorna dados de formulário codificados por URL. Como não estamos reservando o corpo de 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údos relacionados
Para obter mais informações sobre como trabalhar com políticas, consulte:
- Tutorial: Transforme e proteja sua API
- Referência de política para uma lista completa de declarações de política e suas configurações
- Expressões de política
- Definir ou editar políticas
- Reutilizar configurações de política
- Recompra de trechos de política
- Kit de ferramentas de política de Gerenciamento de API do Azure
- Criar políticas usando o Microsoft Copilot no Azure