Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
GILT FÜR: Alle API Management-Ebenen
Verwenden Sie die Richtlinie set-body, um den Meldungstext für eine Anforderung oder Antwort festzulegen. Um auf den Nachrichtentext zuzugreifen, können Sie die Eigenschaft context.Request.Body oder context.Response.Body verwenden, je nachdem, ob sich die Richtlinie im Abschnitt „inbound“ oder „outbound“ befindet.
Wichtig
Wenn Sie mit context.Request.Body oder context.Response.Body auf den Nachrichtentext zugreifen, geht der ursprüngliche Nachrichtentext standardmäßig verloren und muss durch Zurückgeben des Texts im Ausdruck wiederhergestellt werden. Um den Nachrichtentext zu erhalten, legen Sie den Parameter preserveContent auf true fest, wenn Sie auf die Nachricht zugreifen. Wenn preserveContent auf true festgelegt ist und ein anderer Text vom Ausdruck zurückgegeben wird, wird der zurückgegebene Text verwendet.
Hinweis
Legen Sie die Elemente und untergeordneten Elemente einer Richtlinie in der Reihenfolge fest, die in der Richtlinienanweisung angegeben ist. Erfahren Sie mehr darüber, wie Sie API Management-Richtlinien festlegen oder bearbeiten.
Richtlinienanweisung
<set-body template="liquid" xsi-nil="blank | null" parse-date="true | false">
new body value as text
</set-body>
Attribute
| Attribut | BESCHREIBUNG | Erforderlich | Standard |
|---|---|---|---|
| Vorlage | Dient zum Ändern des Vorlagenmodus, in dem die Richtlinie set-body ausgeführt wird. Der einzige derzeit unterstützte Wert ist:- liquid: Die Richtlinie set-body verwendet die Liquid-Vorlagen-Engine. |
Nein | – |
| xsi-nil | Wird verwendet, um zu steuern, wie mit xsi:nil="true" gekennzeichnete Elemente in XML-Nutzlasten dargestellt werden. Legen Sie einen der folgenden Werte fest:- blank
-
nil wird mit einer leeren Zeichenfolge dargestellt.- null
-
nil wird mit einem NULL-Wert dargestellt.Richtlinienausdrücke sind nicht zulässig. |
Nein | blank |
| Analysedatum | Boolesch. Gibt an, ob datumsformatierte Zeichenfolgen (z. B. "/Date(1198908717056)/", "2012-03-21T05:40Z") in System.DateTime (mm/dd/yyyy hh:mm:ss) analysiert werden. Wenn dieser Wert auf false festgelegt ist, werden Datumswerte einfach kopiert.Richtlinienausdrücke sind nicht zulässig. |
Nein | true |
Für den Zugriff auf Informationen über die Anforderung und Antwort, kann die Liquid-Vorlage an ein context-Objekt mit den folgenden Eigenschaften binden:
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
Verwendung
- Richtlinienabschnitte: inbound, outbound, backend
- Richtlinienbereiche: global, Arbeitsbereich, Produkt, API, Vorgang
- Gateways: klassisch, v2, Verbrauch, selbstgehostet, Arbeitsbereich
Hinweise zur Verwendung
- Wenn Sie die Richtlinie
set-bodyverwenden, um einen neuen oder aktualisierten Text zurückzugeben, müssen SiepreserveContentnicht auftruefestlegen, da Sie den Inhalt des neuen Texts explizit angeben. - Das Beibehalten des Inhalts einer Antwort in der eingehenden Pipeline ergibt keinen Sinn, da noch keine Antwort vorliegt.
- Das Beibehalten des Inhalts einer Anforderung in der ausgehenden Pipeline ergibt keinen Sinn, da die Anforderung zu diesem Zeitpunkt bereits an den Back-End gesendet wurde.
- Falls diese Richtlinie verwendet wird, wenn kein Nachrichtentext vorhanden ist, z. B. in einem eingehenden
GET-Vorgang, wird eine Ausnahme ausgelöst.
Weitere Informationen finden Sie in den Abschnitten zu context.Request.Body, context.Response.Body und IMessageBody in der Tabelle context.Request.Body.
Verwenden von Liquid-Vorlagen mit „set-body“
Die Richtlinie set-body kann so konfiguriert werden, dass Sie den Hauptteil einer Anforderung oder Antwort mit der Vorlagensprache set-body transformiert. Dies kann effektiv sein, wenn Sie das Format Ihrer Nachricht vollständig umformen müssen.
Wichtig
Die Implementierung von Liquid, verwendet in der set-body-Richtlinie, wird im „C#-Modus“ konfiguriert. Dies ist beim Ausführen von Aktionen wie z.B. dem Filtern besonders wichtig. Beispielsweise erfordert die Verwendung eines Datumfilters das Verwenden der Pascal-Schreibweise und die C#-Datumsformatierung, z.B.:
{{body.foo.startDateTime| Datum:"yyyyMMdTHH:mm:ssZ"}}
Wichtig
Zum ordnungsgemäßen Binden an ein XML-Text mithilfe der Vorlage für Liquid, verwenden Sie eine set-header-Richtlinie, um Content-Typ entweder auf Anwendung/xml, Text/xml (oder jeder Typ endend mit +xml) festzulegen. Für einen JSON-Text, muss es Anwendung/JSON, Text/JSON (oder jeder Typ endend mit +JSON) sein.
Wichtig
Liquid-Vorlagen verwenden den Anforderungs-/Antworttext in der aktuellen Ausführungspipeline als Eingabe. Aus diesem Grund funktionieren Liquid-Vorlagen nicht, wenn sie innerhalb einer Rückgabe-Antwort-Richtlinie verwendet werden. Eine Rückgabe-Antwort-Richtlinie bricht die aktuelle Ausführungspipeline ab und entfernt den Anforderungs-/Antworttext. Daher erhält jede Liquid-Vorlage, die innerhalb der Rückgabe-Antwort verwendet wird, eine leere Zeichenfolge als Eingabe und erzeugt nicht die erwartete Ausgabe.
Unterstützte Liquid-Filter
Die folgenden Liquid-Filter werden in der set-body-Richtlinie unterstützt. Filterbeispiele finden Sie in der Liquid-Dokumentation.
Hinweis
Die Richtlinie erfordert Pascal-Casing für Liquid-Filternamen (z. B. „AtLeast“ anstelle von „at_least“).
- Bauchmuskeln
- Anfügen
- AtLeast
- AtMost
- Kapitalisieren
- Kompakt
- Währung
- Datum
- Standard
- DividedBy
- Kleinschreibung
- Flucht
- Erste
- H
- Beitreten
- Last (Letzter)
- Lstrip
- Zuordnung
- Subtraktion
- Modulo
- NewlineToBr
- Plus
- Voranstellen
- Entfernen
- EntferneDasErste
- Ersetzen
- ReplaceFirst
- Rund
- Rstrip
- Größe
- Scheibe
- Sortieren
- Trennen
- Streifen
- StripHtml
- StripNewlines
- Uhrzeiten
- Kürzen
- TruncateWords
- Uniq
- Großbuchstaben
- URL-Dekodierung
- UrlEncode
Beispiele
Literaltext
<set-body>Hello world!</set-body>
Zugriff auf den Text als Zeichenfolge
Der ursprüngliche Anforderungstext wird beibehalten, sodass später in der Pipeline darauf zugegriffen werden kann.
<set-body>
@{
string inBody = context.Request.Body.As<string>(preserveContent: true);
if (inBody[0] =='c') {
inBody[0] = 'm';
}
return inBody;
}
</set-body>
Zugriff auf den Text als JObject
Da der ursprüngliche Anforderungstext nicht erhalten bleibt, wird beim späteren Zugriff darauf in der Pipeline eine Ausnahme ausgelöst.
<set-body>
@{
JObject inBody = context.Request.Body.As<JObject>();
if (inBody.attribute == <tag>) {
inBody[0] = 'm';
}
return inBody.ToString();
}
</set-body>
Filtern der Antwort basierend auf dem Produkt
In diesem Beispiel wird gezeigt, wie Inhalte gefiltert werden, indem Datenelemente aus der über einen Back-End-Dienst empfangenen Antwort entfernt werden, wenn das Produkt Starter verwendet wird. Die Back-End-Beispielantwort enthält Eigenschaften auf Stammebene, die der OpenWeather One Call-API ähneln.
<!-- 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>
Konvertieren von JSON in SOAP mithilfe einer Liquid-Vorlage
<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>
Transformieren von JSON mithilfe einer Liquid-Vorlage
<set-body template="liquid">
{
"order": {
"id": "{{body.customer.purchase.identifier}}",
"summary": "{{body.customer.purchase.orderShortDesc}}"
}
}
</set-body>
Zugreifen auf den Text als URL-codierte Formulardaten
Im folgenden Beispiel wird der Ausdruck AsFormUrlEncodedContent() verwendet, um auf den Anforderungstext als URL-codierte Formulardaten (Inhaltstyp application/x-www-form-urlencoded) zuzugreifen. Anschließend wird er in JSON konvertiert. Da der ursprüngliche Anforderungstext nicht erhalten bleibt, wird beim späteren Zugriff darauf in der Pipeline eine Ausnahme ausgelöst.
<set-body>
@{
var inBody = context.Request.Body.AsFormUrlEncodedContent();
return JsonConvert.SerializeObject(inBody);
}
</set-body>
Zugreifen auf den Text und Zurückgeben des Texts als URL-codierte Formulardaten
Im folgenden Beispiel wird der Ausdruck AsFormUrlEncodedContent() verwendet, um auf den Anforderungstext als URL-codierte Formulardaten (Inhaltstyp application/x-www-form-urlencoded) zuzugreifen, Nutzdaten hinzuzufügen und URL-codierte Formulardaten zurückzugeben. Da der ursprüngliche Anforderungstext nicht erhalten bleibt, wird beim späteren Zugriff darauf in der Pipeline eine Ausnahme ausgelöst.
<set-body>
@{
var body = context.Request.Body.AsFormUrlEncodedContent();
body["newKey"].Add("newValue");
return body.ToFormUrlEncodedContent();
}
</set-body>
Verwandte Richtlinien
Zugehöriger Inhalt
Weitere Informationen zum Arbeiten mit Richtlinien finden Sie hier:
- Tutorial: Transformieren und Schützen Ihrer API
- Unter Richtlinien für die API-Verwaltung finden Sie eine komplette Liste der Richtlinienanweisungen und der zugehörigen Einstellungen.
- Richtlinienausdrücke
- Festlegen oder Bearbeiten von Richtlinien
- Wiederverwenden von Richtlinienkonfigurationen
- Repository für Richtliniencodeausschnitte
- Richtlinien-Playground-Repository
- Azure API Management-Richtlinientoolkit
- Anfordern von Copilot-Unterstützung zum Erstellen, Erläutern und Problembehandlung von Richtlinien