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:

- liquidset-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 falsedaty 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

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 na true , 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.Bodysekcje , context.Response.Bodyi 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ć
  • CD
  • 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ł
  • Strip
  • 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-urlencodedzawartoś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-urlencodedzawartoś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>

Aby uzyskać więcej informacji na temat pracy z zasadami, zobacz: