2017-06-20 453 views
0

我一直在閱讀無數相關的問題到我的問題,但他們都沒有解決我的問題。我正在c#中發佈一個HttpWebRequest,其中我發佈數據,然後讀取響應,但響應始終返回爲空。我試圖更改request.contentType,以unncoded,ASCII,& UTF8編碼各種格式的數據。不管我做什麼,我的回答都是空白的。另外,作爲一個側面說明,我的要求是通過層會7C#HttpWebRequest返回空白

var request = (HttpWebRequest)WebRequest.Create(serviceURL); 
var postData = "\"device\"=\"9856\""; 
var data = Encoding.ASCII.GetBytes(postData); 
//request.ContentType = "application/x-www-form-urlencoded"; 
request.ContentType = "application/json; charset=utf-8"; 
request.Timeout = 5000; 
request.Headers.Add("Authorization", b64); 
request.Headers.Add("reqtime", hmacTS); 
request.Headers.Add("appkey", APP_KEY1); 
request.Method = "POST"; 
request.ContentLength = data.Length; 

try 
{ 
    using (var stream = request.GetRequestStream()) 
    { 
     stream.Write(data, 0, data.Length); 
    } 
    var response = (HttpWebResponse)request.GetResponse(); 
    using (var streamReader = new StreamReader(response.GetResponseStream())) 
    { 
     var result = streamReader.ReadToEnd(); 
     updateWindow(this, "Results: " + result); 
     updateWindow(this, "Type: " + response.ContentType); 
     updateWindow(this, "Content Length: " + response.ContentLength); 
    } 
} 
catch (WebException a) 
{ 
    updateWindow(this, "ERROR: " + a); 
} 

我的回答顯示爲:

Results: 
Type: application/octet-stream 
Content Length: 0 

只是爲了通知大家,我終於抓住了問題的根源。服務提供者必須重新啓動服務器,因爲數據庫連接已經結束。經過大約一週與這段代碼的戰鬥,我想他們決定終於檢查我.....感謝所有誰試圖幫助!

+4

你有沒有嘗試過使用像Fiddler這樣的東西來實際**看**你通過電線發送和接收的內容? –

+0

是的,我一直在使用提琴手和身體似乎是正確的。另外fiddler不顯示任何例外的交易。 – Konan

+0

我在小提琴手看到沒有響應身體。顯然,我沒有得到任何回報。內容長度:0,內容類型:application/octet-stream – Konan

回答

0
public static bool GetResponseForJson(string url, out object jsonObject) 
{ 
    bool result; 

    try { 

    HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(url); 
    webRequest.Method = "POST"; 
    HttpWebResponse httpWebResponse = (HttpWebResponse)webRequest.GetResponse(); 
    StreamReader sr = new StreamReader(httpWebResponse.GetResponseStream()); 
    jsonObject = new JavaScriptSerializer().DeserializeObject(sr.ReadToEnd()); 
    result = true; 
    } 
    catch { 

    jsonObject = null; 
    result = false; 
    } 
    return result; 
} 

這是我用來從url獲取響應對象的方法,您可以將webRequest.Method更改爲GET etcetera。

+0

謝謝你的提議。除了Json反序列化之外,你的代碼與我的代碼非常相似。我嘗試了這個建議,但我的回答仍然是空白的。 – Konan

+0

@Konan所以在你的情況下,sr.ReadToEnd()返回一個空字符串? – Peter

+0

是的,它是空白的 – Konan

0

首先檢查響應HTTP代碼。您還正在使用授權。檢查授權標頭值是否正確。如果您使用不記名令牌授權,則需要將「承載」放在報頭中的實際令牌之前。

+0

我正在使用授權和我的授權標頭值是正確的。如果我通過第7層得到異常,它不會顯示某種形式的錯誤嗎? – Konan

+0

這取決於後端的實現。正確的方法是通過HTTP代碼返回狀態。 –