Note
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de changer d’annuaire.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de changer d’annuaire.
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 preserveContent au paramètre true 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 | Descriptif | Obligatoire | Par défaut |
|---|---|---|---|
| modèle | 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-bodypour renvoyer un nouveau corps ou un corps mis à jour, vous n’avez pas besoin de donner la valeurpreserveContentàtrue, 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
GETentrante, 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 :"aaaaMMddTHH :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 »).
- Abdominaux
- Ajouter (Append)
- AtLeast
- AtMost
- Capitaliser
- Compact
- Devise
- Date (Jour/Mois/Année)
- Par défaut
- DividedBy
- En minuscules
- Caractère d'échappement
- Premier
- H
- Unir
- Dernier
- Lstrip
- Mappage
- Moins
- Modulo
- NewlineToBr
- Plus
- Ajouter
- Supprimer
- RemoveFirst
- Remplacer
- ReplaceFirst
- Rond
- Rstrip
- Taille
- Tranche
- Trier
- Fendre
- Bande
- StripHtml
- StripNewlines
- Heures
- Tronquer
- TruncateWords
- Uniq
- Majuscule
- UrlDecode (décodage d'URL)
- 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
- Dépôt de terrain de jeu de stratégie
- Kit de ressources des stratégies Gestion des API Azure
- Obtenez de l’aide de Copilot pour créer, expliquer et dépanner des politiques