Cách thêm văn bản vào nội dung yêu cầu trong RestSharp


103

Tôi đang cố gắng sử dụng RestSharp để sử dụng dịch vụ web. Cho đến nay mọi thứ diễn ra rất tốt (xin chúc mừng John Sheehan và tất cả những người đóng góp!) Nhưng tôi đã gặp phải một rắc rối. Giả sử tôi muốn chèn XML vào phần thân của RestRequest của mình ở dạng đã được tuần tự hóa của nó (tức là dưới dạng một chuỗi). Có cách nào làm dễ hơn không? Có vẻ như hàm .AddBody () tiến hành tuần tự hóa các cảnh, vì vậy chuỗi của tôi đang được chuyển thành <String />.

Bất kỳ trợ giúp nào cũng được đánh giá rất cao!

CHỈNH SỬA: Một mẫu mã hiện tại của tôi đã được yêu cầu. Xem bên dưới --

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

Mã hiện tại của bạn trông như thế nào? Và bạn có vấn đề ở đâu trong đó?
Oded

2
xin lỗi, không thấy cái này cho đến bây giờ. bạn có thể muốn AddParameter () cho điều đó. nếu đó không phải là những gì bạn muốn, hãy đăng lên nhóm google với một ví dụ về nội dung có params + xml mà bạn đang cố gắng đạt được. groups.google.com/group/restsharp
John Sheehan

Câu trả lời:


215

Đây là cách thêm chuỗi xml thuần túy vào nội dung yêu cầu:

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


34
+1 Tương tự như vậy, để thêm JSON thuần túy, đó là req.AddParameter ("text / json", body, ParameterType.RequestBody);
Paul Prewett

49
Trên thực tế, cho Json nó phải được (ít nhất là cho Rails): req.AddParameter("application/json", body, ParameterType.RequestBody);Nhờ Jean Hominal for the tip ở đây
MrWater

1
Làm thế nào để tôi bắt đầu thiết lập điều này chỉ thành một chuỗi được mã hóa HTML? Tức là một lớn get val = 2 & val2 = 3, v.v.
mike james

4
Tôi sẽ nghĩ rằng req.AddParameter ("application / x-www-form-urlencoded", body, ParameterType.RequestBody);
Brian Rice

2
Tôi đang sử dụng phiên bản RestSharp mới nhất và chữ ký phương thức này không khả dụng.
jrahhali

6

Để thêm vào câu trả lời của @ dmitreyg và theo nhận xét của @ jrahhali cho câu trả lời của anh ấy, trong phiên bản hiện tại, tính đến thời điểm nó được đăng v105.2.3, cú pháp như sau:

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
Tôi đã thử điều này, nhưng những gì tôi từng đặt trong tham số Tên thực sự được đặt là Loại nội dung. Vì vậy, đối với cả ContentType và Name, tôi đã sử dụng "application / json".
Thangadurai

Tôi đã thử điều này và nhận được một ngoại lệ tham chiếu rỗng từ bên trong phần còn lại #. Tìm thấy một giải pháp tại stackoverflow.com/a/44281853/109736
JasonCoder

@JasonCoder cảm ơn vì nhận xét. Nó có phải là cùng một phiên bản, v105.2.3 không? Tôi đã có kết quả hỗn hợp với các phiên bản sau đó là lý do tôi yêu cầu. Nó hiện ở số 106 có thể không hoạt động như cũ.
tên-thú vị-ở đây,

@GibralterTrên đầu kết quả của tôi là 106,6,9
JasonCoder
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.