2017-07-21 14 views
6

Postacı kullanıyorum ve x-www-form-urlencoded anahtar/değerlerle beden eklediğim ve postacıda iyi çalıştığı bir api post isteği yapıyorum.RestSharp post isteği - Gövde ile x-www-form-urlencoded değerleri

Sorun, RestSharp paketini kullanarak C# den çalıştığımda ortaya çıkar.

Aşağıdaki kodu denedim ancak yanıt alamadım. "BadRequest" invalid_client hatası alıyorum.

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

gelen jeneratör, kabul cevap olarak işaretleyiniz sizin için yararlı olup olmadığını, benim cevap kontrol oldu. : D –

cevap

4

benim için çalışma, bu postacı

 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

Bu, tırnak işaretleri vb. Gibi parametreleri kodlamıyor gibi görünmüyor. Ayrıca, postacıyla karşılaştırarak fazladan bir teklif kümesi ekliyor gibi görünüyor. – John

+0

RestSharp.Extensions.StringExtensions.UrlEncode yöntemi, requst'a gönderilmeden önce değerleri kodlayabilir. – hmadrigal