C#HttpWebRequest返回空白

问题描述:

我一直在阅读无数相关的问题到我的问题,但他们都没有解决我的问题。我正在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

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

首先检查响应HTTP代码。您还正在使用授权。检查授权标头值是否正确。如果您使用不记名令牌授权,则需要将“承载”放在报头中的实际令牌之前。

+0

我正在使用授权和我的授权标头值是正确的。如果我通过第7层得到异常,它不会显示某种形式的错误吗? – Konan

+0

这取决于后端的实现。正确的方法是通过HTTP代码返回状态。 –