Ustaw treść
DOTYCZY: Wszystkie warstwy usługi API Management
Użyj zasad, set-body
aby ustawić treść komunikatu dla żądania lub odpowiedzi. Aby uzyskać dostęp do treści komunikatu, możesz użyć context.Request.Body
właściwości lub context.Response.Body
, w zależności od tego, czy zasady są w sekcji ruchu przychodzącego, czy wychodzącego.
Ważne
Domyślnie podczas uzyskiwania dostępu do treści komunikatu przy użyciu funkcji context.Request.Body
lub context.Response.Body
, oryginalna treść komunikatu zostanie utracona i musi zostać ustawiona przez zwrócenie treści z powrotem w wyrażeniu. Aby zachować zawartość treści, ustaw preserveContent
parametr na true
wartość podczas uzyskiwania dostępu do komunikatu. Jeśli preserveContent
jest ustawiona wartość i true
wyrażenie zwraca inną treść, zostanie użyta zwrócona treść.
Uwaga
Ustaw elementy zasad i elementy podrzędne w kolejności podanej w instrukcji zasad. Dowiedz się więcej na temat ustawiania lub edytowania zasad usługi API Management.
Instrukcja zasad
<set-body template="liquid" xsi-nil="blank | null" parse-date="true | false">
new body value as text
</set-body>
Atrybuty
Atrybut | opis | Wymagani | Wartość domyślna |
---|---|---|---|
sieci Web | Służy do zmieniania trybu tworzenia szablonów, w ramach którego set-body są uruchamiane zasady. Obecnie jedyną obsługiwaną wartością jest:- liquid set-body - zasady będą używać aparatu do tworzenia szablonów cieczy |
Nie. | Nie dotyczy |
xsi-nil | Służy do kontrolowania sposobu, w jaki elementy oznaczone elementami xsi:nil="true" są reprezentowane w ładunkach XML. Ustaw na jedną z następujących wartości:- blank - nil element jest reprezentowany przy użyciu pustego ciągu.- null - nil element jest reprezentowany przy użyciu wartości null.Wyrażenia zasad nie są dozwolone. |
Nie. | blank |
analizowanie daty | Wartość logiczna. Określa, "/Date(1198908717056)/" czy ciągi w formacie daty (na przykład , "2012-03-21T05:40Z" ) są analizowane na System.DateTime (mm/dd/yyyy hh:mm:ss ). Po ustawieniu wartości false daty są po prostu kopiowane.Wyrażenia zasad nie są dozwolone. |
Nie. | true |
Aby uzyskać dostęp do informacji o żądaniu i odpowiedzi, szablon Liquid może powiązać obiekt kontekstu z następującymi właściwościami:
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
Użycie
- Sekcje zasad: ruch przychodzący, wychodzący, zaplecze
- Zakresy zasad: globalny, obszar roboczy, produkt, interfejs API, operacja
- Bramy: klasyczne, v2, zużycie, self-hosted, obszar roboczy
Uwagi dotyczące użycia
- Jeśli używasz
set-body
zasad do zwracania nowej lub zaktualizowanej treści, nie musisz ustawiaćpreserveContent
wartości natrue
, ponieważ jawnie dostarczasz nową zawartość treści. - Zachowanie zawartości odpowiedzi w potoku przychodzącym nie ma sensu, ponieważ nie ma jeszcze odpowiedzi.
- Zachowanie zawartości żądania w potoku wychodzącym nie ma sensu, ponieważ żądanie zostało już wysłane do zaplecza w tym momencie.
- Jeśli te zasady są używane, gdy nie ma treści komunikatu, na przykład w przypadku ruchu przychodzącego
GET
, zostanie zgłoszony wyjątek.
Aby uzyskać więcej informacji, zobacz context.Request.Body
sekcje , context.Response.Body
i IMessageBody
w tabeli zmiennych kontekstowych .
Używanie szablonów Liquid z zestawem treści
Zasady set-body
można skonfigurować tak, aby używały języka tworzenia szablonów Liquid do przekształcania treści żądania lub odpowiedzi. Może to być skuteczne, jeśli musisz całkowicie ponownie sformatować format wiadomości.
Ważne
Implementacja rozwiązania Liquid używana w set-body
zasadach jest skonfigurowana w trybie "C#". Jest to szczególnie ważne w przypadku wykonywania takich czynności jak filtrowanie. Na przykład użycie filtru daty wymaga użycia wielkości liter Pascal i formatowania dat w języku C#, np.:
{{body.foo.startDateTime| Date:"yyyMMddTHH:mm:ssZ"}}
Ważne
Aby poprawnie powiązać treść XML przy użyciu szablonu Liquid, użyj set-header
zasad, aby ustawić typ zawartości na wartość application/xml, text/xml (lub dowolny typ kończący się ciągiem +xml); dla treści JSON musi to być aplikacja/json, tekst/json (lub dowolny typ kończący się ciągiem +json).
Ważne
Szablony liquid używają treści żądania/odpowiedzi w bieżącym potoku wykonywania jako danych wejściowych. Z tego powodu szablony liquid nie działają w przypadku użycia w zasadach zwracanych odpowiedzi. Zasady return-response anuluje bieżący potok wykonywania i usuwa treść żądania/odpowiedzi. W związku z tym każdy szablon liquid używany wewnątrz odpowiedzi zwracanej otrzyma pusty ciąg jako dane wejściowe i nie będzie wygenerował oczekiwanych danych wyjściowych.
Obsługiwane filtry Liquid
Następujące filtry Liquid są obsługiwane w set-body
zasadach. Przykłady filtrów można znaleźć w dokumentacji rozwiązania Liquid.
Uwaga
Zasady wymagają wielkości liter Pascal dla nazw filtrów Liquid (na przykład "AtLeast" zamiast "at_least").
- Abs
- Dołączanie
- Co najmniej
- Najdalej
- Wykorzystać
- Compact
- Waluta
- Date
- Wartość domyślna
- Podział według
- Małe litery
- Escape
- First
- H
- Dołączanie
- Last
- Lstrip
- Mapowanie
- Minus
- Modulo
- NewlineToBr
- Plus
- Dołączana
- Usuń
- RemoveFirst
- Replace
- ReplaceFirst
- Round
- Rstrip
- Rozmiar
- Wycinek
- Sortuj
- Podział
- Pręga
- StripHtml
- PaskiNowe linie
- Times
- Truncate
- TruncateWords
- Uniq
- Wielkie litery
- UrlDecode
- UrlEncode
Przykłady
Tekst literału
<set-body>Hello world!</set-body>
Uzyskiwanie dostępu do treści jako ciągu
Zachowujemy oryginalną treść żądania, abyśmy mogli uzyskać do niej dostęp w dalszej części potoku.
<set-body>
@{
string inBody = context.Request.Body.As<string>(preserveContent: true);
if (inBody[0] =='c') {
inBody[0] = 'm';
}
return inBody;
}
</set-body>
Uzyskiwanie dostępu do treści jako obiektu JObject
Ponieważ nie zastrzegamy sobie oryginalnej treści żądania, uzyskanie dostępu do niej w dalszej części potoku spowoduje wyjątek.
<set-body>
@{
JObject inBody = context.Request.Body.As<JObject>();
if (inBody.attribute == <tag>) {
inBody[0] = 'm';
}
return inBody.ToString();
}
</set-body>
Filtrowanie odpowiedzi na podstawie produktu
W tym przykładzie pokazano, jak przeprowadzić filtrowanie zawartości przez usunięcie elementów danych z odpowiedzi otrzymanej z usługi zaplecza Starter
podczas korzystania z produktu. Przykładowa odpowiedź zaplecza zawiera właściwości na poziomie głównym podobne do interfejsu API openWeather One Call.
<!-- 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>
Konwertowanie formatu JSON na protokół SOAP przy użyciu szablonu 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>
Przekształcanie kodu JSON przy użyciu szablonu Liquid
<set-body template="liquid">
{
"order": {
"id": "{{body.customer.purchase.identifier}}",
"summary": "{{body.customer.purchase.orderShortDesc}}"
}
}
</set-body>
Uzyskiwanie dostępu do treści jako danych formularza zakodowanych w adresach URL
W poniższym przykładzie AsFormUrlEncodedContent()
użyto wyrażenia w celu uzyskania dostępu do treści żądania jako danych formularza zakodowanego w adresie URL (typu application/x-www-form-urlencoded
zawartości), a następnie konwertuje je na format JSON. Ponieważ nie zastrzegamy sobie oryginalnej treści żądania, uzyskanie dostępu do niej w dalszej części potoku spowoduje wyjątek.
<set-body>
@{
var inBody = context.Request.Body.AsFormUrlEncodedContent();
return JsonConvert.SerializeObject(inBody);
}
</set-body>
Uzyskiwanie dostępu i zwracanie treści jako danych formularza zakodowanych w adresach URL
W poniższym przykładzie AsFormUrlEncodedContent()
użyto wyrażenia , aby uzyskać dostęp do treści żądania jako dane formularza zakodowane w adresie URL (typ application/x-www-form-urlencoded
zawartości), dodaje dane do ładunku i zwraca dane formularza zakodowane w adresie URL. Ponieważ nie zastrzegamy sobie oryginalnej treści żądania, uzyskanie dostępu do niej w dalszej części potoku spowoduje wyjątek.
<set-body>
@{
var body = context.Request.Body.AsFormUrlEncodedContent();
body["newKey"].Add("newValue");
return body.ToFormUrlEncodedContent();
}
</set-body>
Powiązane zasady
Powiązana zawartość
Aby uzyskać więcej informacji na temat pracy z zasadami, zobacz:
- Samouczek: przekształcanie i ochrona interfejsu API
- Dokumentacja zasad dla pełnej listy instrukcji zasad i ich ustawień
- Wyrażenia zasad
- Ustawianie lub edytowanie zasad
- Ponowne używanie konfiguracji zasad
- Repozytorium fragmentów zasad
- Tworzenie zasad przy użyciu rozwiązania Microsoft Copilot na platformie Azure