C#HttpWebRequest返回空白

时间:2017-06-20 12:51:40

标签: c# asp.net web-services httpwebrequest

我一直在阅读无数相关的问题,但我们没有解决我的问题。我在c#中创建一个HttpWebRequest,其中我发布数据然后读取响应,除了响应总是返回为空。我尝试更改request.contentType,以各种格式编码数据,来自未编码,ASCII和& UTF8。无论我做什么,我的回答都是空白的。另外作为附注,我的请求是通过第7层。

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

为了更新所有人,我终于找到了问题的根源。服务提供商必须重新启动服务器,因为数据库连接已经关闭。用这段代码打了大约一个星期后,我猜他们决定最后检查一下......感谢所有试图帮助的人!

3 个答案:

答案 0 :(得分: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;
}

这是我用来从网址获取响应对象的方法,您可以将webRequest.Method更改为GET等。

答案 1 :(得分:0)

首先检查是否有HTTP代码。你也在使用授权。检查Authorization标头值是否正确。如果您使用的是承载令牌授权,则需要将“承载”#34;在标题中的实际标记之前。

答案 2 :(得分:0)

在请求中添加 Accept 标头:

request.Headers.Add("Accept", "application/json");

这对我有用。