Megosztás a következőn keresztül:


Set body (Törzs beállítása)

A KÖVETKEZŐRE VONATKOZIK: Minden API Management-szint

set-body A szabályzat használatával beállíthatja az üzenet törzsét egy kéréshez vagy válaszhoz. Az üzenettörzs eléréséhez használhatja a context.Request.Body tulajdonságot vagy a context.Response.Bodytulajdonságot attól függően, hogy a szabályzat a bejövő vagy kimenő szakaszban található-e.

Fontos

Alapértelmezés szerint ha az üzenettörzset használja context.Request.Body , vagy context.Response.Bodyaz eredeti üzenettörzs elveszik, és a szövegtörzset vissza kell állítani a kifejezésben. A törzstartalom megőrzéséhez állítsa be a preserveContent paramétert true az üzenet elérésekor. Ha preserveContent be van állítva, true és a kifejezés egy másik törzset ad vissza, a visszaadott törzs lesz használva.

Feljegyzés

Állítsa be a szabályzat elemeit és gyermekelemeit a szabályzatutasításban megadott sorrendben. További információ az API Management-szabályzatok beállításáról és szerkesztéséről.

Szabályzatutasítás

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

Attribútumok

Attribútum Leírás Kötelező Alapértelmezett
sablon A szabályzat által futtatott templating mód set-body módosítására szolgál. Jelenleg az egyetlen támogatott érték:

- liquid - a set-body szabályzat a folyékony templatáló motort fogja használni
Nem N.A.
xsi-nil Annak szabályozására szolgál, hogy a megjelölt xsi:nil="true" elemek hogyan legyenek ábrázolva XML-hasznos adatokban. Állítsa az alábbi értékek egyikére:

- blank - nil üres sztringdel van jelölve.
- null - nil null értékkel van jelölve.

A szabályzatkifejezések nem engedélyezettek.
Nem blank
elemzési dátum Logikai. Megadja, "/Date(1198908717056)/"hogy a dátumformátumú sztringek (például , "2012-03-21T05:40Z") a System.DateTime (mm/dd/yyyy hh:mm:ss) értékre legyenek-e elemezve. Ha be van állítva, a falsedátumértékek egyszerűen másolódnak.

A szabályzatkifejezések nem engedélyezettek.
Nem true

A kéréssel és a válaszsal kapcsolatos információk eléréséhez a Liquid-sablon a következő tulajdonságokkal rendelkező környezeti objektumhoz köthet:

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

Használat

Használati megjegyzések

  • Ha a set-body szabályzatot egy új vagy frissített törzs visszaadására használja, akkor nem kell beállítania preserveContenttrue , mert explicit módon adja meg az új törzs tartalmát.
  • A bejövő folyamatban lévő válasz tartalmának megőrzése nem logikus, mert még nincs válasz.
  • A kimenő folyamatban lévő kérés tartalmának megőrzése nem logikus, mert a kérést már elküldték a háttérrendszernek ezen a ponton.
  • Ha ezt a szabályzatot akkor használja a rendszer, ha nincs üzenettörzs, például egy bejövő GETüzenetben, a rendszer kivételt jelez.

További információkért tekintse meg a context.Request.Bodycontext.Response.BodyKörnyezeti változó táblában található szakaszokat és IMessageBody szakaszokat.

Liquid-sablonok használata készlettörzsgel

A set-body szabályzat konfigurálható úgy, hogy a Liquid templating nyelv használatával átalakítsa egy kérés vagy válasz törzsét. Ez akkor lehet hatékony, ha teljesen át kell alakítania az üzenet formátumát.

Fontos

A szabályzatban set-body használt Liquid implementációja "C# módban" van konfigurálva. Ez különösen akkor fontos, ha olyan műveleteket végez, mint a szűrés. Például a dátumszűrő használatához Pascal-casing és C# dátumformázásra van szükség, például:

{{body.foo.startDateTime| Dátum:"yyyyMMddTHH:mm:ssZ"}}

Fontos

Annak érdekében, hogy a Liquid-sablonnal helyesen kötődjön egy XML-törzshöz, használjon egy szabályzatot set-header a Content-Type beállításához alkalmazás/xml, szöveg/xml (vagy bármilyen , +xml végződésű típus) értékre; JSON-törzs esetén az alkalmazásnak/jsonnak, szövegnek/jsonnak (vagy bármilyen + json végződésű típusnak) kell lennie.

Fontos

A folyékony sablonok bemenetként az aktuális végrehajtási folyamat kérés-válasz törzsét használják. Emiatt a folyékony sablonok nem működnek, ha visszatérési válasz szabályzatban használják. A visszatérési válasz szabályzat megszakítja az aktuális végrehajtási folyamatot, és eltávolítja a kérés/válasz törzsét. Ennek eredményeképpen a visszatérési válaszban használt folyékony sablon bemenetként egy üres sztringet kap, és nem hozza létre a várt kimenetet.

Támogatott folyadékszűrők

A szabályzat az set-body alábbi Folyadékszűrőket támogatja. A szűrési példákért tekintse meg a Liquid dokumentációját.

Feljegyzés

A szabályzathoz Pascal-burkolat szükséges a Liquid szűrőnevekhez (például "AtLeast" a "at_least" helyett).

  • Abs
  • Hozzáfűzés
  • AtLeast
  • AtMost
  • Tőkésít
  • Kompakt
  • Pénznem
  • Dátum
  • Alapértelmezett
  • DividedBy
  • Kisbetű
  • Menekülés
  • First
  • H
  • Csatlakozás
  • Last
  • Lstrip
  • Térkép
  • Mínusz
  • Moduló
  • NewlineToBr
  • Plusz ikon
  • Előre felfűzve
  • Eltávolítás
  • RemoveFirst
  • Replace
  • ReplaceFirst
  • Round
  • Rstrip
  • Méret
  • Szelet
  • Sort
  • Split
  • Szalag
  • StripHtml
  • StripNewlines
  • Idő
  • Truncate
  • TruncateWords
  • Uniq
  • Nagybetűs
  • UrlDecode
  • UrlEncode

Példák

Literális szöveg

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

A törzs elérése sztringként

Megőrizzük az eredeti kérelemtörzset, hogy később hozzáférhessünk a folyamathoz.

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

A törzs elérése JObjectként

Mivel nem foglaljuk le az eredeti kérelemtörzset, a folyamat későbbi szakaszában való elérése kivételt eredményez.

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

Válasz szűrése termék alapján

Ez a példa bemutatja, hogyan végezhet tartalomszűrést úgy, hogy eltávolítja az adatelemeket a háttérszolgáltatástól kapott válaszból a Starter termék használatakor. A példa háttérválasz az OpenWeather One Call API-hoz hasonló gyökérszintű tulajdonságokat tartalmaz.

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

JSON konvertálása SOAP-ra folyékony sablon használatával

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

JSON átalakítása Liquid-sablonnal

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

A törzs elérése URL-kódolt űrlapadatokként

Az alábbi példa a AsFormUrlEncodedContent() kifejezéssel url-kódolt űrlapadatokként (tartalomtípusként application/x-www-form-urlencoded) éri el a kérelem törzsét, majd JSON-ra konvertálja. Mivel nem foglaljuk le az eredeti kérelemtörzset, a folyamat későbbi szakaszában való elérése kivételt eredményez.

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

Törzs elérése és visszaküldése URL-kódolt űrlapadatokként

Az alábbi példa a AsFormUrlEncodedContent() kifejezéssel url-kódolt űrlapadatokként (tartalomtípusként application/x-www-form-urlencoded) éri el a kérelem törzsét, adatokat ad hozzá a hasznos adatokhoz, és URL-címmel kódolt űrlapadatokat ad vissza. Mivel nem foglaljuk le az eredeti kérelemtörzset, a folyamat későbbi szakaszában való elérése kivételt eredményez.

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

A szabályzatok használatával kapcsolatos további információkért lásd: