2017-03-06 217 views
-1

试图让json发布请求工作。根据错误响应,错误似乎与请求主体一致。似乎无法找出原因。如果我通过POSTMAN发布相同的请求正文字符串,我会得到一个成功响应。C#json POST请求400错误

var bodyData = new 
{ 
id = "1234567", 
eventType = "create", 
userId = "account-70540" 
} 
var js = new JavaScriptSerializer(); 
string reqBody = js.Serialize(bodyData); 

在其中请求被处理的部分:

HttpWebRequest request = WebRequest.Create(reqUrl) as HttpWebRequest; 
request.Method = "POST";     
request.ContentType = "application/json"; 
request.Headers.Set("x-tracking-id", "12345"); 
HttpWebResponse response = request.GetResponse() as HttpWebResponse; 

最后一行触发异常和我得到一个400错误request.Unexpected错误而解码JSON:消息实体不能为空。

如果我复制字符串reqBody并将其用作邮递员的身体,它的工作原理。 你能帮我解答一下吗?

+1

我看不到你在哪里附加reqBody到请求对象.... – MindingData

+0

@MindingData - 非常感谢。我非常关注申请机构,因此我没有看到不附加身体请求的基本错误。你太棒了! – Mathew

回答

0

你可以尝试这样的事情:

public static string PostJsonSync(string url, object obj) {  
    var httpWebRequest   = (HttpWebRequest)WebRequest.Create(url); 
    httpWebRequest.ContentType = "application/json"; 
    httpWebRequest.Method  = "POST"; 

    using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream())) { 
     var json = JsonConvert.SerializeObject(obj); 
     streamWriter.Write(json); 
     streamWriter.Flush(); 
     streamWriter.Close(); 
    } 

    var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse(); 
    using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) { 
     var result = streamReader.ReadToEnd(); 

     return result; 
    } 
} 

*注:它使用json.net进行序列化。

+0

非常感谢该片段。非常感激! – Mathew