วิธีเพิ่มข้อความเพื่อขอเนื้อหาใน RestSharp


103

ฉันพยายามใช้ RestSharp เพื่อใช้บริการเว็บ จนถึงตอนนี้ทุกอย่างเป็นไปด้วยดี (ขอเชียร์ John Sheehan และผู้ร่วมให้ข้อมูลทุกคน!) แต่ฉันเจออุปสรรค สมมติว่าฉันต้องการแทรก XML ลงในเนื้อหาของ RestRequest ของฉันในรูปแบบอนุกรมแล้ว (เช่นเป็นสตริง) มีวิธีง่ายๆในการทำเช่นนี้หรือไม่? มันปรากฏ .AddBody () <String />ฟังก์ชันปฏิบัติเป็นอันดับดุ๊ฉากเพื่อสตริงของฉันจะกลายเป็น

ความช่วยเหลือใด ๆ ที่ชื่นชมมาก!

แก้ไข: ขอตัวอย่างรหัสปัจจุบันของฉัน ดูด้านล่าง -

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

รหัสปัจจุบันของคุณมีลักษณะอย่างไร แล้วคุณมีปัญหาตรงไหน?
Oded

2
ขออภัยไม่เห็นสิ่งนี้จนถึงตอนนี้ คุณอาจต้องการ AddParameter () สำหรับสิ่งนั้น หากนั่นไม่ใช่สิ่งที่คุณต้องการให้โพสต์ในกลุ่ม Google พร้อมกับตัวอย่างของเนื้อหาที่มี params + xml ที่คุณพยายามจะบรรลุ groups.google.com/group/restsharp
John Sheehan

คำตอบ:


215

นี่คือวิธีการเพิ่มสตริง xml ธรรมดาในเนื้อหาคำขอ:

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


34
+1 ในทำนองเดียวกันในการเพิ่ม JSON ธรรมดามันคือ req.AddParameter ("text / json", body, ParameterType.RequestBody);
Paul Prewett

49
ที่จริงแล้วสำหรับ Json ควรเป็น (อย่างน้อยสำหรับ Rails): req.AddParameter("application/json", body, ParameterType.RequestBody);ขอบคุณ Jean Hominal สำหรับคำแนะนำที่นี่
MrWater

1
ฉันจะตั้งค่าให้เป็นสตริงที่เข้ารหัส HTML ได้อย่างไร เช่นขนาดใหญ่ get val = 2 & val2 = 3 เป็นต้น
mike james

4
ฉันจะคิดว่า req.AddParameter ("application / x-www-form-urlencoded", body, ParameterType.RequestBody);
Brian Rice

2
ฉันใช้ RestSharp เวอร์ชันล่าสุดและลายเซ็นวิธีนี้ใช้ไม่ได้
jrahhali

6

ในการเพิ่มคำตอบของ @ dmitreyg และต่อความคิดเห็นของ @ jrahhali ต่อคำตอบของเขาในเวอร์ชันปัจจุบัน ณ เวลาที่โพสต์นี้v105.2.3ไวยากรณ์จะเป็นดังนี้:

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
ฉันลองสิ่งนี้ แต่สิ่งที่ฉันเคยตั้งไว้ในพารามิเตอร์ Name นั้นถูกตั้งเป็นประเภทเนื้อหา ดังนั้นสำหรับทั้ง ContentType และ Name ฉันจึงใช้ "application / json"
Thangadurai

ฉันลองสิ่งนี้และได้รับข้อยกเว้นการอ้างอิงว่างจากภายในส่วนที่เหลือ # พบวิธีแก้ปัญหาที่stackoverflow.com/a/44281853/109736
JasonCoder

@JasonCoder ขอบคุณสำหรับความคิดเห็น มันเป็นเวอร์ชันเดียวกันหรือไม่ v105.2.3? ฉันมีผลลัพธ์ที่หลากหลายกับเวอร์ชันที่ใหม่กว่าคือเหตุผลที่ฉันถาม ตอนนี้อยู่ที่ 106 ซึ่งอาจใช้งานไม่ได้เหมือนเดิม
ชื่อที่น่าสนใจ - ที่นี่

ผลการค้นหาของฉันอยู่ที่ 106.6.9
JasonCoder
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.