当文件太大时,C#HttpWebResponse contentlength = -1

时间:2013-03-13 01:34:33

标签: c# httpwebrequest httpwebresponse

我从烂番茄网站获得了json格式的字符串。我的代码看起来像

HttpWebRequest webRequest = (HttpWebRequest)HttpWebRequest.Create(url);
webRequest.Method = "GET";
webRequest.ContentType = "application/json";

HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse();

using(StreamReader reader = new StreamReader(response.GetResponseStream()))
{
    //Code I'm using the reader with
}

当我运行一个返回1-4电影的电影搜索时,它可以正常工作。但是,如果我尝试获得5或更多的结果,它将无法正常工作。 webResponse内容长度为-1。当我返回4部电影的结果时,内容长度为7,449。

2 个答案:

答案 0 :(得分:8)

当contentLength返回-1时,这很可能是因为响应是在chunked transfer encoding(或可能是http“0.9”)中返回的。因此,在传输开始时没有已知的内容长度。只需阅读StreamReader直到最后,您就可以获得服务器发送给您的所有内容。

答案 1 :(得分:3)

预期行为 - 属性返回服务器设置的内容长度,因此如果未设置该标头,则获得-1(这可能是从服务器流式传输的大型文件的行为)。

HttpWebResponse.ContentLength

  

备注:ContentLength属性包含随响应返回的Content-Length标头的值。如果未在响应中设置Content-Length标头,则ContentLength将设置为值-1