2017-03-06 212 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