2015-11-03 38 views
1

因此,在过去的2天中,我一直试图在github存储库中添加新问题。这似乎相当简单。 documentation说只是添加一些JSON,然后发送它的方式。尝试添加JSON主体以请求使用RestSharp时的错误请求

我第一次做的一个问题:

 public class RequestIssue 
     { 
      public string title { get; set; } 
      public string body { get; set; } 
      public string assignee { get; set; } 
      public int milestone { get; set; } 
      public List<string> labels { get; set; } 
     } 

,然后使用RestSharp

 string text = JsonConvert.SerializeObject(issue); 
     string text2 = 
      "{ \"title\": \"Found a bug\", \"body\": \"I'm having a problem with this.\", \"assignee\": \"octocat\", \"milestone\": 1, \"labels\": [\"Label1\", \"Label2\"] }"; 
     parameters.Add(new Param("body", text2)); 

     UpdateParameterIfExists(new Param("content-type", "application/json")); 
     UpdateParameterIfExists(new Param("content-length", "1200")); 

     IRestRequest req = new RestRequest(repo.issues_url, Method.POST); 
     //req.AddJsonBody(text); 
     //req.AddObject(issue); 
     req.AddBody(text2, null); 

     req.AddParameter("application/json", text2, ParameterType.RequestBody); 
     req.AddParameter("text/json", text2, ParameterType.RequestBody); 
     req.AddParameter("json", text2, ParameterType.RequestBody); 
     req.AddParameter("body", text2, ParameterType.RequestBody); 
     req.AddParameter("data", text2, ParameterType.RequestBody); 

     await addParametersAndMakeCall(req, new List<Param>()); 

创建一个呼叫,然后进行呼叫。然而,它永远不会失败返回400:错误的请求。

 { 
       "message":"Problems parsing JSON", 
       "documentation_url":"https://developer.github.com/v3/issues/#create-an-issue" 
     } 

我试过不同的机构,发布参数和例子。他们都不想工作。有谁知道我做错了什么?

编辑:改变的内容 - 类型和长度上Brian

+1

如果你发送的是JSON,那么内容类型不应该是'application/json'而不是'application/x-www-form-urlencoded'吗?另外,你确定你的内容长度是正确的吗?即使考虑了字符串中的转义字符,您发布的JSON字符串也超过了100个字符。 –

+0

感谢您的建议。没有运气,但:( – newnottakenname

+1

'content-length'仍然@ 1200.我认为你可以完全离开那个。试着先用postman这样的东西来做这个帖子。可能会启发一些东西 – Rik

回答

1

休息尖锐的建议有一个内置的方法,用于将JSON数据的请求:

public static IRestResponse Create<T>(object objectToUpdate, string apiEndPoint) where T : new() 
{ 
    var request = new RestRequest(apiEndPoint, Method.POST); 

    request.AddJsonBody(objectToUpdate); // HERE 

    var response = _restClient.Execute<T>(request); 
    return response; 
} 

可能会删除某些不确定性与你的电话