Sdílet prostřednictvím


Set body (Nastavit text)

PLATÍ PRO: Všechny úrovně služby API Management

set-body Pomocí zásad nastavte text zprávy pro požadavek nebo odpověď. Pokud chcete získat přístup k textu zprávy, můžete použít context.Request.Body vlastnost nebo context.Response.Bodyv závislosti na tom, jestli je zásada v oddílu příchozí nebo odchozí.

Důležité

Ve výchozím nastavení při přístupu k textu zprávy pomocí context.Request.Body nebo context.Response.Body, původní text zprávy je ztracen a musí být nastaven vrácením textu zpět ve výrazu. Chcete-li zachovat základní obsah, nastavte preserveContent parametr na při přístupu ke true zprávě. Pokud preserveContent je nastavená true hodnota a výraz vrátí jiný text, použije se vrácený text.

Poznámka:

Nastavte prvky zásad a podřízené prvky v pořadí uvedeném v prohlášení o zásadách. Přečtěte si další informace o tom, jak nastavit nebo upravit zásady služby API Management.

Prohlášení o zásadách

<set-body template="liquid" xsi-nil="blank | null" parse-date="true | false">
    new body value as text
</set-body>

Atributy

Atribut Popis Požaduje se Výchozí
šablona Používá se ke změně režimu šablony, ve kterém zásady set-body běží. V současné době je jediná podporovaná hodnota:

- liquidset-body- zásada bude používat modul šablon kapalin
No
xsi-nil Slouží k řízení způsobu znázornění prvků označených xsi:nil="true" v datových částech XML. Nastavte jednu z následujících hodnot:

- blank - nil je reprezentován prázdným řetězcem.
- null - nil je reprezentován hodnotou null.

Výrazy zásad nejsou povolené.
No blank
parse-date Logický. Určuje, "/Date(1198908717056)/"jestli se řetězce formátované datem (například , "2012-03-21T05:40Z") analyzují do system.DateTime (mm/dd/yyyy hh:mm:ss). Pokud je nastavená hodnota false, hodnoty kalendářních dat se jednoduše zkopírují.

Výrazy zásad nejsou povolené.
No true

Pro přístup k informacím o požadavku a odpovědi může šablona Liquid vytvořit vazbu na kontextový objekt s následujícími vlastnostmi:

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

Využití

Poznámky k využití

  • Pokud zásadu set-body používáte k vrácení nového nebo aktualizovaného textu, nemusíte je nastavit preserveContenttrue , protože explicitně zadáváte nový obsah textu.
  • Zachování obsahu odpovědi v příchozím kanálu nemá smysl, protože zatím neexistuje žádná odpověď.
  • Zachování obsahu požadavku v odchozím kanálu nemá smysl, protože požadavek už byl odeslán do back-endu.
  • Pokud se tato zásada použije, pokud neexistuje text zprávy, například v příchozím GETspojení, vyvolá se výjimka.

Další informace naleznete v context.Request.Bodyčásti a context.Response.BodyIMessageBody oddíly v tabulce kontextové proměnné.

Použití šablon Liquid s set-body

Zásady set-body je možné nakonfigurovat tak, aby k transformaci textu požadavku nebo odpovědi používaly jazyk šablon Liquid . To může být efektivní, pokud potřebujete zcela změnit tvar formátu zprávy.

Důležité

Implementace liquidu použitá v zásadách set-body je nakonfigurovaná v režimu C#. To je zvlášť důležité při provádění věcí, jako je filtrování. Například použití filtru kalendářních dat vyžaduje použití formátu casingu Pascal a jazyka C#, například:

{{body.foo.startDateTime| Datum:"yyyYMDDTHH:mm:ssZ"}}

Důležité

Aby bylo možné správně vytvořit vazbu k textu XML pomocí šablony Liquid, použijte zásadu set-header k nastavení content-type na application/xml, text/xml (nebo jakýkoli typ končící na +xml); pro text JSON musí být application/json, text/json (nebo jakýkoli typ končící na +json).

Důležité

Šablony Liquid jako vstup používají text požadavku a odpovědi v aktuálním kanálu spouštění. Z tohoto důvodu nefungují šablony liquid při použití v zásadách návratové odpovědi. Zásada návratové odpovědi zruší aktuální kanál spuštění a odebere text požadavku nebo odpovědi. V důsledku toho všechny šablony liquid použité uvnitř return-response obdrží jako vstup prázdný řetězec a nevygeneruje očekávaný výstup.

Podporované filtry Liquid

V zásadách se podporují set-body následující filtry Liquid. Příklady filtrů najdete v dokumentaci liquid.

Poznámka:

Zásada vyžaduje pro názvy filtrů Liquid písmena Pascal (například "AtLeast" místo "at_least").

  • Abs
  • Připojit
  • Alespoň
  • Nejvíce atmost
  • Vydělat
  • Compact
  • Měna
  • Date
  • Výchozí
  • Děleno
  • Malá písmena
  • Escape
  • První
  • H
  • Připojení
  • Last
  • Lstrip
  • Mapovat
  • Záporný
  • Zbytek po dělení
  • NewlineToBr
  • Kladný
  • Předpend
  • Odebrat
  • RemoveFirst
  • Nahradit
  • ReplaceFirst
  • Round
  • Rstrip
  • Velikost
  • Řez
  • Sort
  • Rozděleno
  • Pás
  • StripHtml
  • StripNewlines
  • Times
  • Truncate
  • TruncateWords
  • Uniq
  • Velká písmena
  • UrlDecode
  • Urlencode

Příklady

Text literálu

<set-body>Hello world!</set-body>

Přístup k textu jako řetězce

Zachováváme původní text požadavku, abychom k němu měli přístup později v kanálu.

<set-body>
@{ 
    string inBody = context.Request.Body.As<string>(preserveContent: true); 
    if (inBody[0] =='c') { 
        inBody[0] = 'm'; 
    } 
    return inBody; 
}
</set-body>

Přístup k textu jako objektU JObject

Vzhledem k tomu, že původní text požadavku si nezarezervujeme, bude mít přístup později v kanálu výjimku.

<set-body> 
@{ 
    JObject inBody = context.Request.Body.As<JObject>(); 
    if (inBody.attribute == <tag>) { 
        inBody[0] = 'm'; 
    } 
    return inBody.ToString(); 
} 
</set-body>

Filtrování odpovědí na základě produktu

Tento příklad ukazuje, jak provést filtrování obsahu odebráním datových prvků z odpovědi přijaté z back-endové služby při použití Starter produktu. Příklad back-endové odpovědi obsahuje vlastnosti kořenové úrovně podobné rozhraní OpenWeather One Call API.

<!-- 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>

Převod JSON na SOAP pomocí šablony 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>

Transformace JSON pomocí šablony Liquid

<set-body template="liquid">
{
"order": {
    "id": "{{body.customer.purchase.identifier}}",
    "summary": "{{body.customer.purchase.orderShortDesc}}"
    }
}
</set-body>

Přístup k textu jako dat formulářů kódovaným adresou URL

Následující příklad používá AsFormUrlEncodedContent() výraz pro přístup k textu požadavku jako data formuláře kódované adresou URL (typ application/x-www-form-urlencodedobsahu) a pak ho převede na JSON. Vzhledem k tomu, že původní text požadavku si nezarezervujeme, bude mít přístup později v kanálu výjimku.

<set-body> 
@{ 
    var inBody = context.Request.Body.AsFormUrlEncodedContent();
    return JsonConvert.SerializeObject(inBody); 
} 
</set-body>

Přístup k datům formuláře kódovaný adresou URL a vrácení textu

Následující příklad používá AsFormUrlEncodedContent() výraz pro přístup k textu požadavku jako data formuláře kódované adresou URL (typ application/x-www-form-urlencodedobsahu), přidá data do datové části a vrátí data formuláře kódovaná adresou URL. Vzhledem k tomu, že původní text požadavku si nezarezervujeme, bude mít přístup později v kanálu výjimku.

<set-body> 
@{ 
    var body = context.Request.Body.AsFormUrlEncodedContent();
    body["newKey"].Add("newValue");
    return body.ToFormUrlEncodedContent(); 
} 
</set-body>

Další informace o práci se zásadami najdete v tématech: