Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

RestSharp post request - Body with x-www-form-urlencoded values

Tags:

c#

post

restsharp

I am using postman and making an api post request where I am adding body with x-www-form-urlencoded key/values and it works fine in postman.

The issue arrises when I try it from c# using RestSharp package.

I have tried the following code below but not getting the response. I get "BadRequest" invalid_client error.

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); 
like image 569
nicedev80 Avatar asked Jul 21 '17 13:07

nicedev80


People also ask

How do I send a post request on RestSharp?

It's better to specify the Json data body. var client = new RestClient("URL"); var request = new RestRequest("Resources",Method. POST); request. RequestFormat = RestSharp.

How do I request a RestSharp body?

The request body is a type of parameter. To add one, you can do one of these... req. AddBody(body); req.

Does RestSharp use HttpClient?

Since RestSharp uses the HttpClient, we should consider similar issues regarding the RestClient instantiation.


Video Answer


2 Answers

this working for me, it was generator from postman

        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); 
like image 126
Kira Hao Avatar answered Sep 18 '22 17:09

Kira Hao


I personally find this way to work better for me when sending Form-UrlEncoded data.

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          // Content type is not required when adding parameters this way         // This will also automatically UrlEncode the values         req.AddParameter("client_id",config.client_id, ParameterType.GetOrPost);         req.AddParameter("grant_type",config.grant_type, ParameterType.GetOrPost);         req.AddParameter("client_secret",config.client_secret, ParameterType.GetOrPost);         req.AddParameter("scope",config.scope, ParameterType.GetOrPost);         req.AddParameter("response_type",config.response_type, ParameterType.GetOrPost);          var res = client.Execute(req);         return; } 

Details on this parameter type can be found here: https://github.com/restsharp/RestSharp/wiki/ParameterTypes-for-RestRequest#getorpost

like image 26
Nosfera2 Avatar answered Sep 18 '22 17:09

Nosfera2