Gövdeyi ayarla

UYGULANANLAR: Tüm API Management katmanları

bir istek veya yanıt için ileti gövdesini ayarlamak için ilkeyi set-body kullanın. İleti gövdesine erişmek için, ilkenin context.Request.Body gelen veya context.Response.Bodygiden bölümünde olmasına bağlı olarak veya özelliğini kullanabilirsiniz.

Önemli

veya context.Response.Bodykullanarak context.Request.Body ileti gövdesine eriştiğinizde varsayılan olarak özgün ileti gövdesi kaybolur ve gövde ifadeye geri döndürülerek ayarlanmalıdır. Gövde içeriğini korumak için, iletiye preserveContent erişirken parametresini olarak true ayarlayın. olarak ayarlanırsa true ve ifade tarafından farklı bir gövde döndürülürsepreserveContent, döndürülen gövde kullanılır.

Not

İlkenin öğelerini ve alt öğelerini ilke bildiriminde sağlanan sırayla ayarlayın. API Management ilkelerini ayarlama veya düzenleme hakkında daha fazla bilgi edinin.

İlke bildirimi

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

Özellikler

Öznitelik Açıklama Zorunlu Varsayılan
şablonu İlkenin çalıştığı şablon oluşturma modunu set-body değiştirmek için kullanılır. Şu anda desteklenen tek değer:

- liquidset-body- ilke sıvı şablonlama motorunu kullanacaktır
Hayır YOK
xsi-nil ile xsi:nil="true" işaretlenen öğelerin XML yüklerinde nasıl temsil edildiklerini denetlemek için kullanılır. Aşağıdaki değerlerden birine ayarlayın:

- blank - nil boş bir dizeyle gösterilir.
- null - nil null değerle temsil edilir.

İlke ifadelerine izin verilmez.
Hayır blank
ayrıştırma tarihi Boole. Tarih biçimli dizelerin (örneğin, "/Date(1198908717056)/", "2012-03-21T05:40Z") System.DateTime (mm/dd/yyyy hh:mm:ss) olarak ayrıştırılıp ayrıştırılmayacağını belirtir. olarak ayarlandığında false, tarih değerleri basitçe kopyalanır.

İlke ifadelerine izin verilmez.
Hayır true

Liquid şablonu, istek ve yanıt hakkındaki bilgilere erişmek için aşağıdaki özelliklere sahip bir bağlam nesnesine bağlanabilir:

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

Kullanım

Kullanım notları

  • İlkeyi set-body yeni veya güncelleştirilmiş bir gövde döndürmek için kullanıyorsanız, yeni gövde içeriğini açıkça sağladığınız için olarak ayarlamanız preserveContent true gerekmez.
  • Henüz yanıt olmadığından, gelen işlem hattında yanıtın içeriğinin korunması mantıklı değildir.
  • İstek bu noktada arka uçtan zaten gönderildiğinden, giden işlem hattında bir isteğin içeriğinin korunması mantıklı değildir.
  • Bu ilke, örneğin gelen GETileti gövdesi olmadığında kullanılırsa, bir özel durum oluşturulur.

Daha fazla bilgi için Bağlam değişkeni tablosundaki IMessageBody , context.Response.Bodyve bölümlerine bakıncontext.Request.Body.

Liquid şablonlarını set-body ile kullanma

İlke, set-body bir isteğin veya yanıtın gövdesini dönüştürmek için Liquid templating dilini kullanacak şekilde yapılandırılabilir. İletinizin biçimini tamamen yeniden şekillendirmeniz gerekiyorsa bu etkili olabilir.

Önemli

İlkede set-body kullanılan Liquid uygulaması 'C# modunda' yapılandırılır. Filtreleme gibi işlemler yapılırken bu özellikle önemlidir. Örneğin, tarih filtresi kullanmak için Pascal büyük/küçük harf kullanımı ve C# tarih biçimlendirmesi kullanılması gerekir; örneğin:

{{body.foo.startDateTime| Tarih:"yyyyMMddTHH:mm:ssZ"}}

Önemli

Liquid şablonunu kullanarak xml gövdesine doğru şekilde bağlanmak için, content-Type'ı uygulama/xml, metin/xml (veya +xml ile biten herhangi bir tür) olarak ayarlamak için bir ilke kullanın set-header ; JSON gövdesi için uygulama/json, metin/json (veya +json ile biten herhangi bir tür) olmalıdır.

Önemli

Liquid şablonları, giriş olarak geçerli yürütme işlem hattındaki istek/yanıt gövdesini kullanır. Bu nedenle, bir dönüş-yanıt ilkesi içinde kullanıldığında sıvı şablonları çalışmaz. Dönüş yanıtı ilkesi geçerli yürütme işlem hattını iptal eder ve istek/yanıt gövdesini kaldırır. Sonuç olarak, return-response içinde kullanılan herhangi bir sıvı şablonu girişi olarak boş bir dize alır ve beklenen çıkışı üretmez.

Desteklenen Liquid filtreleri

İlkede set-body aşağıdaki Liquid filtreleri desteklenir. Filtre örnekleri için Liquid belgelerine bakın.

Not

İlke, Liquid filtre adları için Pascal büyük/küçük harf kullanılmasını gerektirir ("at_least" yerine "AtLeast" gibi).

  • Abs
  • Arkasına Ekle
  • AtLeast
  • En Çok
  • Yararlanmak
  • Compact
  • Para birimi
  • Tarih
  • Varsayılan
  • BölünmüşAyrı
  • Küçük Harf
  • Escape
  • First
  • H
  • Katılın
  • Last
  • Lstrip
  • Harita
  • Eksi
  • Mod
  • NewlineToBr
  • Artı
  • Önüne
  • Kaldır
  • RemoveFirst
  • Replace
  • ReplaceFirst
  • Round
  • Rstrip
  • Size
  • Dilim
  • Sırala
  • Bölünme
  • Şerit
  • StripHtml
  • StripNewlines
  • Times
  • Truncate
  • TruncateWords
  • Uniq
  • Büyük Harf
  • UrlDecode
  • UrlEncode

Örnekler

Değişmez metin

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

Gövdeye dize olarak erişme

Özgün istek gövdesini, işlem hattında daha sonra erişebilmek için koruyoruz.

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

Gövdeye JObject olarak erişme

Özgün istek gövdesini ayırmadığımız için, işlem hattında daha sonra erişilmesi bir özel durumla sonuçlanır.

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

Yanıtı ürüne göre filtreleme

Bu örnekte, ürünü kullanırken arka uç hizmetinden alınan yanıttan veri öğelerini kaldırarak içerik filtreleme işleminin nasıl gerçekleştirildiği gösterilmektedir Starter . Örnek arka uç yanıtı, OpenWeather One Call API'sine benzer kök düzeyinde özellikler içerir.

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

Liquid şablonu kullanarak JSON'ı SOAP'ye dönüştürme

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

Liquid şablonu kullanarak JSON'i dönüştürme

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

Gövdeye URL ile kodlanmış form verileri olarak erişme

Aşağıdaki örnek, istek gövdesine AsFormUrlEncodedContent() URL ile kodlanmış form verileri (içerik türü application/x-www-form-urlencoded) olarak erişmek için ifadesini kullanır ve ardından JSON'a dönüştürür. Özgün istek gövdesini ayırmadığımız için, işlem hattında daha sonra erişilmesi bir özel durumla sonuçlanır.

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

Gövdeye ERIŞME ve gövdeyi URL ile kodlanmış form verileri olarak döndürme

Aşağıdaki örnek, url ile kodlanmış form verileri (içerik türüapplication/x-www-form-urlencoded) olarak istek gövdesine erişmek için ifadesini kullanırAsFormUrlEncodedContent(), yüke veri ekler ve URL ile kodlanmış form verilerini döndürür. Özgün istek gövdesini ayırmadığımız için, işlem hattında daha sonra erişilmesi bir özel durumla sonuçlanır.

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

İlkelerle çalışma hakkında daha fazla bilgi için bkz: