2012-05-25 41 views
15

Tôi muốn thực hiện một yêu cầu POST tới một URL như thế này:Thêm một tham số GET để yêu cầu POST với RestSharp

http://localhost/resource?auth_token=1234 

Và tôi muốn gửi JSON trong cơ thể. Mã của tôi trông giống như sau:

var client = new RestClient("http://localhost"); 
var request = new RestRequest("resource", Method.POST); 
request.AddParameter("auth_token", "1234");  
request.AddBody(json); 
var response = client.Execute(request); 

Làm cách nào để đặt tham số auth_token là tham số GET và yêu cầu làm POST?

Trả lời

20

này nên làm việc nếu bạn 1) thêm token để url nguồn lực và 2) xác định ParameterType.UrlSegment như thế này:

var client = new RestClient("http://localhost"); 
var request = new RestRequest("resource?auth_token={authToken}", Method.POST); 
request.AddParameter("auth_token", "1234", ParameterType.UrlSegment);  
request.AddBody(json); 
var response = client.Execute(request); 

Đây là xa lý tưởng - nhưng cách đơn giản nhất tôi đã tìm thấy. .. vẫn hy vọng tìm được một cách tốt hơn.

+3

Không có giải pháp đẹp hơn, không liên quan đến việc sử dụng UrlSegment trong mã thông báo chuỗi truy vấn được chỉ định theo cách thủ công không? Điều này làm việc, nhưng nó là một cách giải quyết khó chịu ... và nó không phù hợp tốt trong mọi tình huống. –

+0

Nó hoạt động, nhưng như @SebastianZaklada nói. Nó không thực sự là một giải pháp "tốt đẹp". – wouterds

+4

Có ai làm cho nó hoạt động mà không có UrlSegment không? Thật khủng khiếp ... Chúng tôi cần có thể thêm thông số trong URL bất kể ĐỘNG TỪ HTTP, vì có thể thực hiện theo các thông số HTTP ... Trong trường hợp của tôi, tôi có một lớp cơ sở nơi tất cả các yêu cầu chuyển qua nó và các lớp con chỉ gửi dữ liệu bài đăng, vì vậy tôi muốn đóng gói mã thông báo này bên trong lớp cơ sở nếu không, mỗi khi tôi cần mã thông báo, tôi cần phải thêm mã đó vào URL ... ví dụ đây là phương pháp tôi kêu gọi lớp cơ sở Nó không làm việc, trừ khi trước đây tôi đặt giữ chỗ theo yêu cầu ... xấu hổ ... –

25

Phiên bản hiện tại của RestSharp có một phương pháp ngắn mà làm cho việc sử dụng một mẫu:

var request = new RestRequest("resource?auth_token={token}", Method.POST); 
request.AddUrlSegment("token", "1234"); 

Ngoài ra, bạn có thể thêm một tham số mà không có một mẫu:

var request = new RestRequest("resource", Method.POST); 
request.AddQueryParameter("auth_token", "1234); 

hoặc

var request = new RestRequest("resource", Method.POST); 
request.AddParameter("auth_token", "1234", ParameterType.QueryString); 
+5

Đáng chú ý rằng ParameterType.QueryString đã được thêm vào trong RestSharp v104.3. Dự án của tôi đã tham chiếu một phiên bản cũ hơn nên điều này không có sẵn mà không cần nâng cấp. –

+3

v105.0.0 giới thiệu 'request.AddQueryParameter (tên, giá trị)' là một trình bao bọc xung quanh 'request.AddParameter (tên, giá trị, ParameterType.QueryString)' –

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