2012-05-25 9 views
15

Ich möchte eine POST-Anforderung an eine URL wie folgt machen:einen GET-Parameter auf eine POST-Anfrage hinzufügen mit RestSharp

http://localhost/resource?auth_token=1234 

Und ich will JSON im Körper senden. Mein Code sieht in etwa wie folgt aus:

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

Wie kann ich den auth_token Parametersatz einen GET-Parameter und stellen Sie die Anforderung als POST sein?

Antwort

20

Dies sollte funktionieren, wenn Sie 1), um den Token an die Ressourcen-URL hinzufügen und 2) angeben ParameterType.UrlSegment wie folgt aus:

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

Das bei weitem nicht ideal - aber der einfachste Weg, die ich gefunden habe. .. immer noch hoffen, einen besseren Weg zu finden.

+3

Gibt es keine bessere Lösung, bei der UrlSegment nicht in einem manuell angegebenen Abfragezeichenfolgen-Token verwendet wird? Das funktioniert, aber es ist ein böser Workaround ... und es passt nicht in allen Situationen gut. –

+0

Es funktioniert, aber wie @SebastianZaklada sagt. Es ist nicht wirklich eine "nette" Lösung. – wouterds

+4

Kann jemand ohne das UrlSegment arbeiten? Es ist schrecklich ... Wir müssen in der URL unabhängig vom HTTP-VERB Parameter hinzufügen können, da es möglich ist, den HTTP-Spezifikationen zu folgen ... In meinem Fall habe ich eine Basisklasse, in der alle Anforderungen übergeben werden Es und Unterklassen, die senden nur die Post-Daten, so möchte ich dieses Token in der Basisklasse kapseln, andernfalls jedes Mal, wenn ich das Token brauche ich es in der URL hinzufügen ... zum Beispiel das ist die Methode I rufe Basisklasse Es arbeitet nicht, es sei denn, ich den Platzhalter auf Antrag zuvor eingestellte ... Shame ... –

25

Die aktuelle Version von RestSharp hat eine kurze Methode, die verwendet eine Vorlage: Alternativ können Sie einen Parameter ohne Vorlage hinzufügen

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

oder

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

Beachten Sie, dass ParameterType.QueryString in RestSharp v104.3 hinzugefügt wurde. In meinem Projekt wurde auf eine ältere Version verwiesen, sodass diese ohne Aktualisierung nicht verfügbar war. –

+3

v105.0.0 eingeführt 'request.AddQueryParameter (Name, Wert)' was ist ein Wrapper um 'request.AddParameter (Name, Wert, ParameterType.QueryString)' –