2013-05-27 18 views
16

C# .NET 3.5 bir sığınakta API istemcisi inşa ediyorum.RestSharp kullanarak HTTP istek gövdesine nasıl erişilir?

İlk önce eski güzel HttpWebClient (ve HttpWebResponse) ile çalışmaya başladım, istediğim her şeyi yapabilirdim. Mutluydum. Takıldığım tek şey JSON cevabından otomatik serileştirmekti.

Bu yüzden, RESTful API istemcilerinin gelişimini kolaylaştıran ve JSON ve XML yanıtlarını otomatik olarak serileştiren RestSharp (104.1) adlı harika bir kitaplık duydum. Tüm kodlarımı değiştirdim, ancak şimdi, ham istek kütüğüne erişim ve düzenleme gibi HttpWebClient ve HttpWebResponse ile yapabileceğim şeylerin yapamayacağının farkındayım.

Herkesin bir çözümü var mı?

Düzenleme: İstek gövdesinin nasıl ayarlanacağını biliyorum (request.AddBody() ile), benim sorunum bu istek dizesini almak, düzenlemek ve istekte yeniden ayarlamak (istek gövdesini güncellemek) sinek)

cevap

34

İstek gövdesi bir tür parametredir. birini eklemek için TypeParameterType.RequestBody eşittir nerede req.Parameters koleksiyonunda öğeler için bakabilirsiniz vücut parametresini almak için bunlardan birini ...

req.AddBody(body); 
req.AddBody(body, xmlNamespace); 
req.AddParameter("text/xml", body, ParameterType.RequestBody); 
req.AddParameter("application/json", body, ParameterType.RequestBody); 

yapabilirsiniz.

RestRequest sınıfı here sınıfına bakın. Bu parametre ayarlanır

ise, isteğin organı olarak gönderilecektir değerdir: Burada

RestSharp docs on ParameterType.RequestBody söyleyeceklerini olduğunu. Parametre adı ihmal ve böylece ek RequestBody Parametreler şunlardır - okunur 1 kabul edilir.

RequestBody yalnızca POST veya PUT İstekleri üzerinde çalışmaktadır, yalnızca bir gövde göndermektedir. siz de parametreleri GetOrPost varsa

, onlar RequestBody üzerine yazılır - RestSharp bunları birleştirmek olmaz ama yerine uzağa RequestBody parametresini fırlatır. okuma için

/on-the-fly vücut parametresinin tazelenmesi, deneyebilirsin:

var body = req.Parameters.Where(p => p.Type == ParameterType.RequestBody).FirstOrDefault(); 
if (body != null) 
{ 
    Console.WriteLine("CurrentBody={0}", body.Value); 
    body.Value = "NewBodyValue"; 
} 

Bunlar yoksa, farklı bir vücut ile RestRequest nesnenin yeni bir kopyasını oluşturun.

+1

Mükemmel, teşekkürler! Tam çalışma kodu var: http://pastebin.com/0c4bqPNW – Epoc

İlgili konular