2012-09-05 36 views
9

Tôi đang cố gắng để có được RestSharp để làm việc với một dịch vụ an toàn mà tôi có. Mọi thứ dường như hoạt động tốt, trừ khi đối tượng của tôi được chuyển qua POST có chứa một danh sách (trong trường hợp cụ thể này là danh sách string).RestSharp có thể gửi Danh sách <string> trong yêu cầu POST không?

đối tượng của tôi:

public class TestObj 
{ 
    public string Name{get;set;} 
    public List<string> Children{get;set;} 
} 

Khi điều này được gửi đến máy chủ Children tài sản được gửi như là một chuỗi với những nội dung System.Collections.Generic.List`1[System.String].

Đây là cách tôi đang gửi các đối tượng:

var client = new RestClient(); 
var request = new RestRequest("http://localhost", Method.PUT); 

var test = new TestObj {Name = "Fred", Children = new List<string> {"Arthur", "Betty"}}; 
request.AddObject(test); 
client.Execute<TestObj>(request); 

Tôi có làm điều gì sai, hay đây là một lỗi trong RestSharp? (Nếu nó tạo sự khác biệt, tôi đang sử dụng JSON, chứ không phải XML.)

Trả lời

2

Tôi gặp sự cố tương tự với danh sách Hướng dẫn. Bài đăng của tôi sẽ hoạt động nhưng danh sách sẽ không bao giờ có dữ liệu chính xác. Tôi bị hack nó ABIT và sử dụng json.net serialize đối tượng

Issue I had on another stackoverflow post

Tôi biết điều này là không hoàn hảo nhưng hiện các trick

+0

tôi sử dụng chuỗi JSON khi giao dịch với IEnumerables trong viewmodels MVC cho những gì nó có giá trị, vì vậy tôi không nghĩ rằng đây là một giải pháp xấu cả. –

8

Nó phụ thuộc vào những gì máy chủ bạn đang đánh, nhưng nếu bạn đang đánh một bộ điều khiển ASP.NET Web API (và công nghệ server-side lẽ khác), nó sẽ có tác dụng nếu bạn thêm từng hạng mục trong bộ sưu tập trong một vòng lặp:

foreach (var child in test.Children) 
    request.AddParameter("children", x)); 
+1

Tôi nghĩ rằng đây sẽ là câu trả lời hàng đầu. Không có cách nào thích hợp để giải quyết vấn đề này, và cá nhân tôi nghĩ RestSharp về cơ bản nên sử dụng điều này theo mặc định xem xét mức độ phổ biến của IEnumerables trong các khung công tác web. So với các giải pháp khác tôi đã thấy trên bài đăng này và trên các bài viết tương tự, giải pháp này có thể dễ dàng được đóng gói và dựa vào không có thư viện bên ngoài (có khả năng giới thiệu một số phí trên mỗi nút trong bộ sưu tập). –

2

Sử dụng AddJsonBody

var client = new RestClient(); 
var request = new RestRequest("http://localhost", Method.PUT); 
request.AddJsonBody(new TestObj { 
    Name = "Fred", 
    Children = new List<string> {"Arthur", "Betty"} 
}); 
client.Execute(request); 

Api Side

[AcceptVerbs("PUT")] 
string Portefeuille(TestObj obj) 
{ 
    return String.Format("Sup' {0}, you have {1} nice children", 
     obj.Name, obj.Children.Count()); 
} 
+0

Cảm ơn câu trả lời @Koranger - bạn có biết cách đối tượng sẽ nhìn vào các thông số - vì vậy nó có thể được truy cập trong bộ điều khiển máy chủ không? – BKSpurgeon

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