2017-07-21 18 views
6

Tôi đang sử dụng người đưa thư và thực hiện yêu cầu đăng api nơi tôi thêm nội dung có khóa/giá trị x-www-form-urlencoded và hoạt động tốt trong người đưa thư.Yêu cầu bài đăng RestSharp - Nội dung có giá trị x-www-form-urlencoded

Sự cố xảy ra khi tôi thử từ C# bằng gói RestSharp.

Tôi đã thử mã dưới đây nhưng không nhận được phản hồi. Tôi gặp lỗi invalid_client "BadRequest".

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

kiểm tra câu trả lời của tôi, nếu nó là hữu ích cho bạn, đánh dấu là câu trả lời chấp nhận. : D –

Trả lời

4

làm việc này đối với tôi, đó là máy phát điện từ người đưa thư

 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

Điều này dường như không mã hóa các thông số espacping dấu ngoặc kép vv Nó cũng có vẻ để thêm một bộ thêm dấu ngoặc kép so sánh nó với người đưa thư. – John

+0

Phương thức RestSharp.Extensions.StringExtensions.UrlEncode có thể mã hóa các giá trị trước khi được gửi trong requst. – hmadrigal

Các vấn đề liên quan