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.Body
giden bölümünde olmasına bağlı olarak veya özelliğini kullanabilirsiniz.
Önemli
veya context.Response.Body
kullanarak 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:- liquid set-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
- İlke bölümleri: gelen, giden, arka uç
- İlke kapsamları: genel, çalışma alanı, ürün, API, işlem
- Ağ geçitleri: klasik, v2, tüketim, şirket içinde barındırılan, çalışma alanı
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ızpreserveContent
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
GET
ileti 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.Body
ve 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>
İlgili ilkeler
İlgili içerik
İlkelerle çalışma hakkında daha fazla bilgi için bkz: