Bagaimana menambahkan teks ke tubuh permintaan di RestSharp

103

Saya mencoba menggunakan RestSharp untuk menggunakan layanan web. Sejauh ini semuanya berjalan dengan sangat baik (tepuk tangan untuk John Sheehan dan semua kontributor!) Tetapi saya mengalami masalah. Katakanlah saya ingin memasukkan XML ke dalam tubuh RestRequest saya dalam bentuk yang sudah berseri (yaitu, sebagai string). Adakah cara mudah untuk melakukan ini? Tampaknya fungsi .AddBody () melakukan serialisasi di belakang layar, jadi string saya diubah menjadi <String />.

Bantuan apa pun sangat dihargai!

EDIT: Contoh kode saya saat ini diminta. Lihat di bawah --

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;
}
Matt G.
sumber
Seperti apa kode Anda saat ini? Dan di bagian manakah Anda memiliki masalah?
Oded
2
maaf, tidak melihat ini sampai sekarang. Anda mungkin ingin AddParameter () untuk itu. jika bukan itu yang Anda inginkan, posting ke grup google dengan contoh tubuh dengan params + xml yang ingin Anda capai. groups.google.com/group/restsharp
John Sheehan

Jawaban:

215

Berikut adalah cara menambahkan string xml biasa ke tubuh permintaan:

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

dmitreyg.dll
sumber
34
+1 Demikian pula, untuk menambahkan JSON biasa, itu req.AddParameter ("text / json", body, ParameterType.RequestBody);
Paul Prewett
49
Sebenarnya, untuk Json seharusnya (setidaknya untuk Rails): req.AddParameter("application/json", body, ParameterType.RequestBody);Terima kasih kepada Jean Hominal atas tipnya di sini
MrWater
1
Bagaimana cara saya menyetel ini menjadi hanya string yang dikodekan HTML? Ie a large get val = 2 & val2 = 3 etc.
mike james
4
Saya akan berpikir req.AddParameter ("application / x-www-form-urlencoded", body, ParameterType.RequestBody);
Brian Rice
2
Saya menggunakan versi terbaru RestSharp, dan tanda tangan metode ini tidak tersedia.
jrahhali
6

Untuk Menambah jawaban @ dmitreyg dan komentar per @ jrahhali ke jawabannya, di versi saat ini, pada saat ini diposting v105.2.3, sintaksnya adalah sebagai berikut:

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
});
nama-menarik-di sini
sumber
1
Saya mencoba ini, tetapi apa pun yang saya tetapkan di parameter Nama sebenarnya disetel sebagai Jenis konten. Jadi untuk ContentType dan Name, saya menggunakan "application / json".
Thangadurai
Saya mencoba ini dan mendapat pengecualian referensi nol dari dalam istirahat #. Menemukan solusi di stackoverflow.com/a/44281853/109736
JasonCoder
@JasonCoder terima kasih atas komentarnya. Apakah itu versi yang sama juga, v105.2.3? Saya mendapatkan hasil yang beragam dengan versi yang lebih baru adalah alasan saya bertanya. Sekarang ada di 106 yang mungkin tidak beroperasi sama.
nama-menarik-di sini
@GibralterTop hasil saya dengan 106.6.9
JasonCoder