2012-05-25 65 views
15

我想要一個POST請求到以下網址:GET參數添加到POST請求與RestSharp

http://localhost/resource?auth_token=1234 

而且我想在身體發送JSON。我的代碼看起來是這樣的:

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

我如何可以設置auth_token參數是一個GET參數,並提出此類請求POST? - 但我發現最簡單的方法

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

這是很不理想:

回答

20

,如果你1)添加令牌資源URL和2)指定ParameterType.UrlSegment這樣這應該工作。仍然希望找到更好的方法。

+3

沒有更好的解決方案,它不涉及在手動指定的查詢字符串標記中使用UrlSegment?這是有效的,但它是一個令人討厭的解決方法...並且它在所有情況下都不適合。 –

+0

它的工作原理,正如@SebastianZaklada所說。這不是一個真正的「好」解決方案。 – wouterds

+4

有沒有人得到它的工作沒有UrlSegment?它是可怕的...我們需要能夠在URL中添加參數,而不管HTTP HTTP VERB,因爲遵循HTTP規範是可能的...... 在我的情況中,我有一個基類,所有請求都通過它和子類只發送發佈數據,所以我希望在基類內封裝這個令牌,否則每次我需要令牌時我需要將它添加到URL中... 例如,這是方法I呼籲基類 它不工作,除非我先前設置的佔位符的請求......恥辱... –

25

RestSharp的當前版本有一個很短的方法,使得使用模板:

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

或者,你可以添加一個參數,而模板:

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

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

值得注意的是,在RestSharp v104.3中添加了ParameterType.QueryString。我的項目引用了一個較舊的版本,因此在未升級時無法使用。 –

+3

v105.0.0引入'request.AddQueryParameter(name,value)',它是'request.AddParameter(name,value,ParameterType.QueryString) –