0

THE PROBLEM:

1 - The "Content-Type" change from "application/json" to "x-www-form-urlencoded"

2 - The Task parameter is converted from object {...} to string "{...}"

I looked this: RestSharp defaulting Content-Type to application/x-www-form-urlencoded on POST But, don't solved my problem. Solved the problem 1, but don't the 2. I can't keep object parameter.

How can I solve this?

Code:

  var parametros = new Dictionary<string, object>();

  parametros.Add("user", "23j7yh653eb7002e53df02");
  parametros.Add("client", "58e652dbe33eb7002e53df6f");
  parametros.Add("obs", "new one");

  var client = new RestClient("https://my.domain.com");
  var request = new RestRequest("api/newtask", Method.POST); 

  request.AddHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0");
  request.AddHeader("Content-Type", "application/json");
  request.AddHeader("Host", "my.domain.com");
  request.AddHeader("Referer", "https://my.domain.com/");
  request.AddHeader("Accept", "application/json, text/plain, */*");
  request.AddHeader("Accept-Encoding", "gzip, deflate, br");
  request.AddHeader("Authorization", "Bearer 85754r5565546544545566t55hf4f4j5k4fj45jk");

And this one I try diferent way:

  parametros.Add("task", "{ \"desc\" = \"This is my new task\", \"id\" = \"102030\" }");

or remove and put this:

  request.AddParameter("task",new {desc="This is my new task", id="102030"});

or I try this:

  task myTask = new task();
  myTask.id = "102030";
  myTask.name = "This is my new task";

  request.AddParameter("task", Newtonsoft.Json.JsonConvert.SerializeObject(myTask));

Then

  foreach (var item in parametros)
  {
        //request.AddParameter(item.Key.ToString(), item.Value, ParameterType.RequestBody);  //I tried this one, but don't worked
        request.AddParameter(item.Key.ToString(), item.Value);
  }

  IRestResponse response2 = client.Post(request);
  string appoint = response2.Content;
Community
  • 1
  • 1
MarcioAT
  • 60
  • 1
  • 7

1 Answers1

0

I don't know if this on may help someone. Then this is the solution.

JUST THIS:

Add the parameter to dictionary:

     parametros.Add("task", myTask);

And just add one request parameter:

    request.AddParameter("application/json",
         Newtonsoft.Json.JsonConvert.SerializeObject(parametros),
         ParameterType.RequestBody);

Entire code:

  task myTask = new task();
  myTask.id = "102030";
  myTask.name = "This is my new task";

  var parametros = new Dictionary<string, object>();

  parametros.Add("user", "23j7yh653eb7002e53df02");
  parametros.Add("client", "58e652dbe33eb7002e53df6f");
  parametros.Add("obs", "new one");
  parametros.Add("task", myTask);

  var client = new RestClient("https://my.domain.com");
  var request = new RestRequest("api/newtask", Method.POST); 

  request.AddHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0");
  request.AddHeader("Content-Type", "application/json");
  request.AddHeader("Host", "my.domain.com");
  request.AddHeader("Referer", "https://my.domain.com/");
  request.AddHeader("Accept", "application/json, text/plain, */*");
  request.AddHeader("Accept-Encoding", "gzip, deflate, br");
  request.AddHeader("Authorization", "Bearer 85754r5565546544545566t55hf4f4j5k4fj45jk");

    request.AddParameter("application/json",
         Newtonsoft.Json.JsonConvert.SerializeObject(parametros),
         ParameterType.RequestBody);

  IRestResponse response2 = client.Post(request);
  string appoint = response2.Content;
MarcioAT
  • 60
  • 1
  • 7