2017-04-13 7 views
0

인한 문제 :RestSharp "응용 프로그램/JSON"에서 "Content-Type을"변화 변화에 "x-www-form-urlencoded를"

1 - "응용 프로그램/JSON"에에서 "Content-Type을"변화 RestSharp defaulting Content-Type to application/x-www-form-urlencoded on POST 하지만, 돈 : - "x-www-form-urlencoded로는"

2

는 작업 매개 변수가 문자열 객체 {...}에서 변환됩니다 "{...}"

나는이 보였다 내 문제를 해결하지 못했습니다. 문제 1을 해결했지만 개체 매개 변수를 유지할 수 없습니다. 2. 않습니다.

어떻게 해결할 수 있습니까?

코드 :

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"); 

그리고이 사람은 내가 가지 다른 방법으로 시도 :

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

또는 제거하고이 넣어 :

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

또는 나는이 시도 :

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

    request.AddParameter("task", Newtonsoft.Json.JsonConvert.SerializeObject(myTask)); 
을이에 사람을 도움이 될 수있는 경우

그런 다음

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; 

답변

0

모르겠어요. 그러면 이것이 해결책입니다.

그냥 이건 :

 parametros.Add("task", myTask); 

을 그리고 단 하나 개의 요청 매개 변수 추가 :

사전에 매개 변수를 추가

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

전체 코드 :

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;