RestSharp'ta istek gövdesine metin nasıl eklenir


103

Bir web servisini kullanmak için RestSharp'ı kullanmaya çalışıyorum. Şimdiye kadar her şey çok iyi gitti (John Sheehan'a ve tüm katkıda bulunanlara teşekkürler!) Ama bir engelle karşılaştım. Diyelim ki benim RestRequest'imin gövdesine zaten serileştirilmiş haliyle (yani, bir dizge olarak) XML eklemek istiyorum. Bunu yapmanın kolay bir yolu var mı? Görünüşe göre .AddBody () işlevi sahne arkasında serileştirme yapıyor, bu yüzden dizem dönüştürülüyor <String />.

Herhangi bir yardım çok takdir edilmektedir!

DÜZENLEME: Mevcut kodumun bir örneği istendi. Aşağıya bakınız --

private T ExecuteRequest<T>(string resource,
                            RestSharp.Method httpMethod,
                            IEnumerable<Parameter> parameters = null,
                            string body = null) where T : new()
{
    RestClient client = new RestClient(this.BaseURL);
    RestRequest req = new RestRequest(resource, httpMethod);

    // Add all parameters (and body, if applicable) to the request
    req.AddParameter("api_key", this.APIKey);
    if (parameters != null)
    {
        foreach (Parameter p in parameters) req.AddParameter(p);
    }

    if (!string.IsNullOrEmpty(body)) req.AddBody(body); // <-- ISSUE HERE

    RestResponse<T> resp = client.Execute<T>(req);
    return resp.Data;
}

Mevcut kodunuz neye benziyor? Ve sorunun neresinde var?
Oded

2
üzgünüm, bunu şimdiye kadar görmedim. muhtemelen bunun için AddParameter () istiyorsunuz. İstediğiniz bu değilse, başarmaya çalıştığınız params + xml ile gövde örneğini google grubuna gönderin. groups.google.com/group/restsharp
John Sheehan

Yanıtlar:


216

İstek gövdesine düz xml dizesi şu şekilde eklenir:

req.AddParameter("text/xml", body, ParameterType.RequestBody);


34
+1 Aynı şekilde, düz JSON eklemek için, req.AddParameter ("text / json", body, ParameterType.RequestBody);
Paul Prewett

49
Aslında Json için (en azından Raylar için) olmalıdır: req.AddParameter("application/json", body, ParameterType.RequestBody);Bahşiş için Jean HOMINAL sayesinde burada
MrWater

1
Bunu yalnızca HTML kodlu bir dizeye ayarlamaktan nasıl vazgeçerim? Yani büyük get val = 2 & val2 = 3 vb.
mike james

4
Req.AddParameter ("application / x-www-form-urlencoded", body, ParameterType.RequestBody);
Brian Rice

2
RestSharp'ın en son sürümünü kullanıyorum ve bu yöntem imzası mevcut değil.
jrahhali

6

@ Dmitreyg'in cevabına ve @ jrahhali'nin cevabına yapılan yorumuna eklemek için, mevcut versiyonda, bunun yayınlandığı andan itibaren v105.2.3, sözdizimi aşağıdaki gibidir:

request.Parameters.Add(new Parameter() { 
    ContentType = "application/json", 
    Name = "JSONPAYLOAD", // not required 
    Type = ParameterType.RequestBody, 
    Value = jsonBody
});

request.Parameters.Add(new Parameter() { 
    ContentType = "text/xml", 
    Name = "XMLPAYLOAD", // not required 
    Type = ParameterType.RequestBody, 
    Value = xmlBody
});

1
Bunu denedim, ancak Name parametresinde belirlediğim her şey aslında content-Type olarak ayarlandı. Bu yüzden hem ContentType hem de Name için "application / json" kullandım.
Thangadurai

Bunu denedim ve dinlenme # içinden boş bir referans istisnası aldım. Stackoverflow.com/a/44281853/109736
JasonCoder

@JasonCoder yorum için teşekkürler. Aynı sürüm v105.2.3 müydü? Sonraki sürümlerle karışık sonuçlar aldım, sormamın nedeni bu. Şimdi 106'da, aynı şekilde çalışmayabilir.
ilginç-isim-burada

En iyi sonuçlarım 106.6.9 ile oldu
JasonCoder
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.