2012-05-25 21 views
15

Chcę, aby złożyć zamówienie posta URL tak:Dodaj parametr GET do żądania POST z RestSharp

http://localhost/resource?auth_token=1234 

I chcę wysłać JSON w organizmie. Mój kod wygląda mniej więcej tak:

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

Jak mogę ustawić parametr auth_token być parametr GET i uczynić żądania jako POST?

Odpowiedz

20

To powinno działać, jeśli 1) dodać token do adresu URL zasobów i 2) określić ParameterType.UrlSegment tak:

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

To jest dalekie od ideału - ale najprostszy sposób mam znaleźć. .. wciąż mając nadzieję znaleźć lepszy sposób.

+3

Czy nie ma ładniejszego rozwiązania, które nie wymaga użycia UrlSegment w ręcznie określonym tokenie ciągu zapytań? To działa, ale jest nieprzyjemnym obejściem ... i nie pasuje do wszystkiego w każdej sytuacji. –

+0

Działa, ale jak mówi @SebastianZaklada. To nie jest tak naprawdę "miłe" rozwiązanie. – wouterds

+4

Czy ktokolwiek sprawi, że działa bez UrlSegment? To jest okropne ... Musimy mieć możliwość dodania parametru w adresie URL niezależnie od VERB HTTP, ponieważ jest to możliwe po specyfikacji HTTP ... W moim przypadku mam klasę podstawową, w której wszystkie wnioski przechodzą to i podklasy, które wysyłają tylko dane pocztowe, więc chcę enkapsulować ten token wewnątrz klasy bazowej, w przeciwnym razie, za każdym razem gdy potrzebuję tokena, muszę go dodać w adresie URL ... na przykład jest to metoda I wzywają klasy bazowej To nie pracy, chyba że wcześniej ustawić zastępczy na życzenie ... Wstyd ... –

25

Aktualna wersja RestSharp ma krótki sposób, który sprawia, że ​​korzystanie z szablonu:

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

Alternatywnie, można dodać parametr bez szablonu:

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

lub

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

Warto zauważyć, że parametr ParameterType.QueryString został dodany w RestSharp v104.3. Mój projekt odwoływał się do starszej wersji, więc nie było to możliwe bez aktualizacji. –

+3

v105.0.0 wprowadził 'request.AddQueryParameter (name, value)', który jest plikiem otaczającym 'request.AddParameter (name, value, ParameterType.QueryString)' –