2017-07-21 4 views
6

Ich benutze Postbote und eine api Beitrag Anfrage, wo ich Körper mit x-www-Form-urlencoded Schlüssel/Werte hinzufügen und es funktioniert gut in Postboten.RestSharp Beitrag Anfrage - Körper mit x-www-Form-urlencoded Werte

Das Problem tritt auf, wenn ich es aus C# mit RestSharp-Paket versuchen.

Ich habe den folgenden Code versucht, aber nicht die Antwort erhalten. Ich erhalte den Fehler "BadRequest" invalid_client.

public class ClientConfig { 
    public string client_id { get; set; } = "value here"; 
    public string grant_type { get; set; } = "value here"; 
    public string client_secret { get; set; } = "value here"; 
    public string scope { get; set; } = "value here"; 
    public string response_type { get; set; } = "value here"; 
} 

public void GetResponse() { 
     var client = new RestClient("api-url-here"); 
     var req = new RestRequest("endpoint-here",Method.POST); 
     var config = new ClientConfig();//values to pass in request 

     req.AddHeader("Content-Type","application/x-www-form-urlencoded"); 
     req.AddParameter("application/x-www-form-urlencoded",config,ParameterType.RequestBody); 

     var res = client.Execute(req); 
     return; 
    } 

//Also tried this 

    req.AddParameter("client_id",config.client_id,"application/x-www-form-urlencoded",ParameterType.RequestBody); 
       req.AddParameter("grant_type",config.grant_type,"application/x-www-form-urlencoded",ParameterType.RequestBody); 
       req.AddParameter("client_secret",config.client_secret,"application/x-www-form-urlencoded",ParameterType.RequestBody); 
       req.AddParameter("scope",config.scope,ParameterType.RequestBody); 
       req.AddParameter("response_type",config.response_type,"application/x-www-form-urlencoded",ParameterType.RequestBody); 

//tried this too 
var client = new RestClient("url-here"); 
      var req = new RestRequest("endpointhere",Method.POST); 
      var config = new ClientConfig(); 
req.AddBody(config); 
var res = client.Execute(req); 
+0

meine Antwort überprüfen, ob es für Sie nützlich ist, Marke als Antwort akzeptiert. : D –

Antwort

4

diese Arbeits für mich, es war Generator von Postbote

 var token = new TokenValidation() 
     { 
       app_id = CloudConfigurationManager.GetSetting("appId"), 
       secret = CloudConfigurationManager.GetSetting("secret"), 
       grant_type = CloudConfigurationManager.GetSetting("grant_type"), 
       Username = CloudConfigurationManager.GetSetting("Username"), 
       Password = CloudConfigurationManager.GetSetting("Password"), 
     }; 

     var client = new RestClient($"{xxx}{tokenEndPoint}"); 
     var request = new RestRequest(Method.POST); 
     request.AddHeader("content-type", "application/x-www-form-urlencoded"); 
     request.AddParameter("application/x-www-form-urlencoded", $"app_id={token.app_id}&secret={token.secret}&grant_type={token.grant_type}&Username={token.Username}&Password={token.Password}", ParameterType.RequestBody); 
     IRestResponse response = client.Execute(request); 

     if (response.StatusCode != HttpStatusCode.OK) 
     { 
      Console.WriteLine("Access Token cannot obtain, process terminate"); 
      return null; 
     } 

     var tokenResponse = JsonConvert.DeserializeObject<TokenValidationResponse>(response.Content); 
+0

Dies scheint nicht die Parameter espacing Zitate usw. zu kodieren. Es scheint auch eine zusätzliche Reihe von Anführungszeichen hinzuzufügen, die es mit Postboten vergleichen. – John

+0

Die Methode RestSharp.Extensions.StringExtensions.UrlEncode kann die Werte codieren, bevor sie im Request gesendet werden. – hmadrigal