2013-05-27 58 views
16

Tôi đang xây dựng một ứng dụng API RESTful trong C# .NET 3.5.Cách truy cập cơ quan yêu cầu HTTP bằng RestSharp?

Tôi lần đầu tiên bắt đầu xây dựng nó với cũ tốt HttpWebClient (và HttpWebResponse), tôi có thể làm bất cứ điều gì tôi muốn. Tôi thây vui vẻ. Điều duy nhất tôi đã bị mắc kẹt là việc deserialization tự động từ phản ứng JSON.

Vì vậy, tôi đã nghe nói về một thư viện tuyệt vời có tên RestSharp (104.1) giúp giảm bớt sự phát triển của các máy khách RESTful API và tự động deserialize JSON và các phản hồi XML. Tôi đã chuyển tất cả mã của mình trên đó, nhưng bây giờ tôi nhận ra rằng tôi không thể làm những việc tôi có thể làm với HttpWebClientHttpWebResponse, như truy cập và chỉnh sửa nội dung yêu cầu thô.

Bất kỳ ai có giải pháp?

Chỉnh sửa: Tôi biết cách đặt thân yêu cầu (với request.AddBody()), vấn đề của tôi là tôi muốn nhận chuỗi yêu cầu này, chỉnh sửa và đặt lại trong yêu cầu (cập nhật phần thân yêu cầu bay)

Trả lời

34

Nội dung yêu cầu là loại tham số. Để thêm, bạn có thể làm một trong những ...

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

để lấy các thông số cơ thể bạn có thể tìm kiếm các mặt hàng trong bộ sưu tập req.Parameters nơi Type bằng ParameterType.RequestBody.

Xem mã cho RestRequest lớp here.

Dưới đây là những gì các RestSharp docs on ParameterType.RequestBody đã nói:

Nếu tham số này được thiết lập, giá trị của nó sẽ được gửi dưới dạng cơ thể của yêu cầu . Tên của Tham số bị bỏ qua và do đó, có thêm Tham số RequestBody - chỉ 1 được chấp nhận.

Yêu cầuBody chỉ hoạt động trên các yêu cầu POST hoặc PUT, vì chỉ thực tế chúng gửi nội dung.

Nếu bạn có thông số GetOrPost, chúng sẽ ghi đè lên RequestBody - RestSharp sẽ không kết hợp chúng nhưng thay vào đó, thay vào đó, hãy xóa tham số RequestBody đi .

Để đọc/cập nhật các thông số cơ thể on-the-fly, bạn có thể thử:

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

Hoặc thất bại đó, tạo ra một bản sao mới của đối tượng RestRequest với một cơ thể khác nhau.

+1

Tuyệt vời, cảm ơn! Có mã hoạt động đầy đủ: http://pastebin.com/0c4bqPNW – Epoc

Các vấn đề liên quan