Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
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 | Descrição | 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 |
Não | 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-bodypolítica para retornar um corpo novo ou atualizado, não precisará definirpreserveContentcomotrueporque 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.Bodye as seções na tabela Variável de IMessageBodycontexto.
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").
- Abdominais
- Acrescentar
- Pelo menos
- No máximo
- Capitalizar
- Compacto
- Moeda
- Data
- Predefinição
- Divididopor:
- Caixa baixa
- Esc
- Primeiro
- H
- Participar
- Último
- Lstrip
- Mapa
- Menos
- Módulo
- NewlineToBr
- Sinal de adição
- Pendente
- Remover
- RemoveFirst
- Substituir
- SubstituirPrimeiro
- Rodada
- Rstrip
- Tamanho
- Setor
- Ordenar
- Dividida
- Tira
- StripHtml
- StripNewlines
- Horas
- Truncar
- TruncateWords
- Uniq
- Caixa de reposição
- Decodificação de URL
- Codificação de URL
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-urlencodedde 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-urlencodedde 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
- Política de recompra de parques infantis
- Kit de ferramentas de política de Gerenciamento de API do Azure
- Obtenha assistência do Copilot para criar, explicar e resolver problemas com políticas