Définir le corps
S’APPLIQUE À : Tous les niveaux de Gestion des API
Utilisez la stratégie set-body
pour définir le corps du message pour une requête ou une réponse. Pour accéder au corps du message, vous pouvez utiliser la propriété context.Request.Body
ou context.Response.Body
, selon que la stratégie se trouve dans la section inbound ou outbound.
Important
Par défaut, lorsque vous accédez au corps du message avec context.Request.Body
ou context.Response.Body
, le corps du message d’origine est perdu et doit être défini en renvoyant le corps dans l’expression. Pour conserver le contenu du corps, donnez la valeur true
au paramètre preserveContent
lorsque vous accédez au message. Si preserveContent
a la valeur true
et qu’un autre corps est renvoyé par l’expression, le corps renvoyé est utilisé.
Notes
Définissez les éléments enfants et de stratégie dans l’ordre fourni dans l’instruction de stratégie. En savoir plus sur comment définir ou modifier des stratégies du service Gestion des API.
Instruction de la stratégie
<set-body template="liquid" xsi-nil="blank | null" parse-date="true | false">
new body value as text
</set-body>
Attributs
Attribut | Description | Obligatoire | Default |
---|---|---|---|
template | Permet de modifier le mode de templating dans lequel la stratégie set-body est exécutée. Actuellement, la seule valeur possible est :- liquid : la stratégie set-body utilisera le moteur de templating liquide |
Non | N/A |
xsi-nil | Permet de contrôler la façon dont les éléments marqués avec xsi:nil="true" sont représentés dans les charges utiles XML. Définissez l’une des valeurs suivantes :- blank - nil est représenté par une chaîne vide.- null - nil est représenté avec une valeur null.Les expressions de stratégie ne sont pas autorisées. |
Non | blank |
date de l’analyse | Booléenne. Spécifie si les chaînes au format date (par exemple, "/Date(1198908717056)/" , "2012-03-21T05:40Z" ) sont analysées sur System.DateTime (mm/dd/yyyy hh:mm:ss ). Quand les valeurs de date sont définies sur false , elles sont simplement copiées.Les expressions de stratégie ne sont pas autorisées. |
Non | true |
Pour accéder aux informations sur la requête et la réponse, le modèle Liquid peut lier à un objet de contexte aux propriétés suivantes :
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
Utilisation
- Sections de la stratégie : inbound, outbound, backend
- Étendues de la stratégie : global, espace de travail, produit, API, opération
- Passerelles : classiques, v2, consommation, auto-hébergées, espace de travail
Notes d’utilisation
- Si vous utilisez la stratégie
set-body
pour renvoyer un nouveau corps ou un corps mis à jour, vous n’avez pas besoin de donner la valeurtrue
àpreserveContent
, car vous fournissez explicitement le nouveau contenu du corps. - Conserver le contenu d’une réponse dans le pipeline entrant n’est pas judicieux, car il n’existe encore aucune réponse.
- Conserver le contenu d’une demande dans le pipeline de sortie n’est pas judicieux, car la demande a déjà été envoyée au service principal à ce stade.
- Si cette stratégie est utilisée en l’absence de corps de message, par exemple dans une requête
GET
entrante, une exception est levée.
Pour plus d’informations, consultez les sections context.Request.Body
, context.Response.Body
et IMessageBody
dans le tableau context.Request.Body
.
Utilisation de modèles Liquid avec Set body
La stratégie set-body
peut être configurée pour utiliser le langage de modèle set-body
pour transformer le corps d’une requête ou réponse. Cela peut être efficace si vous avez besoin de modifier complètement le format de votre message.
Important
L’implémentation Liquid utilisée dans la stratégie set-body
est configurée en mode « C# ». Cela est particulièrement important lors d’opérations telles que le filtrage. Par exemple, l’utilisation d’un filtre de date nécessite l’emploi de la casse Pascal et de la mise en forme de date de C#, par exemple :
{{body.foo.startDateTime| Date:"yyyyMMddTHH:mm:ssZ"}}
Important
Pour établir correctement une liaison avec un corps XML à l’aide du modèle Liquid, utilisez une stratégie set-header
pour définir Content-Type pour application/xml, text/xml (ou n’importe quel type se terminant par +xml). Pour un corps JSON, la valeur doit être application/json, text/json (ou n’importe quel type se terminant par +json).
Important
Les modèles Liquid utilisent le corps de la demande/réponse dans le pipeline d’exécution actuel comme entrée. Pour cette raison, les modèles Liquid ne fonctionnent pas lorsqu’ils sont utilisés dans une stratégie return-response. Une stratégie return-response annule le pipeline d’exécution actuel et supprime le corps de la demande/réponse. Par conséquent, tout modèle Liquid utilisé à l’intérieur de return-response reçoit une chaîne vide comme entrée et ne produit pas la sortie attendue.
Filtres Liquid pris en charge
Les filtres Liquid suivants sont pris en charge dans la stratégie set-body
. Pour obtenir des exemples de filtre, consultez la Documentation Liquid.
Notes
La stratégie nécessite la casse Pascal pour les noms de filtre Liquid (par exemple, « AtLeast »et non « at_least »).
- Abs
- Ajouter (Append)
- AtLeast
- AtMost
- Capitalize
- Compact
- Devise
- Date
- Default
- DividedBy
- Downcase
- Caractère d'échappement
- Premier
- H
- Join
- Dernier
- Lstrip
- Mappage
- Moins
- Modulo
- NewlineToBr
- Plus
- Prepend
- Supprimer
- RemoveFirst
- Replace
- ReplaceFirst
- Round
- Rstrip
- Taille
- Tranche
- Trier
- Split
- Strip
- StripHtml
- StripNewlines
- Heures
- Tronquer
- TruncateWords
- Uniq
- Upcase
- UrlDecode
- UrlEncode
Exemples
Texte littéral
<set-body>Hello world!</set-body>
Accès au corps sous forme de chaîne
Nous conservons le corps de la demande d’origine pour pouvoir y accéder plus tard dans le pipeline.
<set-body>
@{
string inBody = context.Request.Body.As<string>(preserveContent: true);
if (inBody[0] =='c') {
inBody[0] = 'm';
}
return inBody;
}
</set-body>
Accès au corps sous forme de JObject
Puisque nous ne conservons pas le corps de la demande d’origine, si nous tentons d’y accéder plus tard dans le pipeline, nous obtenons une exception.
<set-body>
@{
JObject inBody = context.Request.Body.As<JObject>();
if (inBody.attribute == <tag>) {
inBody[0] = 'm';
}
return inBody.ToString();
}
</set-body>
Filtrer la réponse en fonction du produit
Cet exemple montre comment effectuer un filtrage du contenu en supprimant des éléments de données de la réponse reçue d’un service principal en cas d’utilisation du produit Starter
. L’exemple de réponse principale comprend des propriétés de niveau racine similaires à l'API d’appel 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>
Conversion de JSON en SOAP à l’aide d’un modèle 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>
Transformation de JSON à l’aide d’un modèle Liquid
<set-body template="liquid">
{
"order": {
"id": "{{body.customer.purchase.identifier}}",
"summary": "{{body.customer.purchase.orderShortDesc}}"
}
}
</set-body>
Accédez au corps en tant que données de formulaire encodées par URL
L’exemple suivant utilise l’expression AsFormUrlEncodedContent()
pour accéder au corps de la requête en tant que données de formulaire encodées par URL (type de contenu application/x-www-form-urlencoded
), puis les convertit en JSON. Puisque nous ne conservons pas le corps de la demande d’origine, si nous tentons d’y accéder plus tard dans le pipeline, nous obtenons une exception.
<set-body>
@{
var inBody = context.Request.Body.AsFormUrlEncodedContent();
return JsonConvert.SerializeObject(inBody);
}
</set-body>
Accédez et retournez le corps sous forme de données de formulaire encodées par URL
L’exemple suivant utilise l’expression AsFormUrlEncodedContent()
pour accéder au corps de la demande en tant que données de formulaire encodées par URL (type de contenu application/x-www-form-urlencoded
), ajoute des données à la charge utile et retourne des données de formulaire encodées par URL. Puisque nous ne conservons pas le corps de la demande d’origine, si nous tentons d’y accéder plus tard dans le pipeline, nous obtenons une exception.
<set-body>
@{
var body = context.Request.Body.AsFormUrlEncodedContent();
body["newKey"].Add("newValue");
return body.ToFormUrlEncodedContent();
}
</set-body>
Stratégies connexes
Contenu connexe
Pour plus d’informations sur l’utilisation des stratégies, consultez :
- Tutoriel : Transformer et protéger votre API
- Référence de stratégie pour obtenir la liste complète des instructions et des paramètres de stratégie
- Expressions de stratégie
- Définir ou modifier des stratégies
- Réutilisation de configurations de stratégie
- Référentiel d’extrait de stratégie
- Créer des stratégies à l’aide de Microsoft Copilot dans Azure