2012-04-24 85 views
0

在我的c#应用程序(.net 4)中,我想计算总上传和下载数据大小(以KB为单位),以下是代码,问题是'request.contentLength'总是返回-1 。'request.contentLength'(用于上传数据计算)和'response.contentLength'(用于下载数据计算)是计算此数据的正确语句吗?request.contentLength返回-1

private string pageFetch(string url,int requestTimeOut) 
    { 

     HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); 
     request.Timeout = requestTimeOut; 
     if (!Program.proxyType.Equals("None")) 
     { 
      int iPortNo = 0; 
      try 
      { 
       iPortNo = Int32.Parse(Program.proxyPort); 
      } 
      catch (Exception ex) 
      { 
       iPortNo = 0; 
      } 
      WebProxy objProxy = new WebProxy(Program.proxyAddress, iPortNo); 
      if (!Program.proxyUsername.Equals("")) 
      { 
       objProxy.Credentials = new NetworkCredential(Program.proxyUsername, Program.proxyPassword); 
      } 
      request.Proxy = objProxy; 
     } 
     HttpWebResponse response=null; 

     try 
     { 
      response = (HttpWebResponse)request.GetResponse(); 

     } 
     catch (Exception e) 
     { 

     } 


     lock (lockObject) 
     { 
      if (response.ContentLength>0) 
      totalDownload += (response.ContentLength/1024); 
      if(request.ContentLength>0) 
      totalUpload += (request.ContentLength/1024); 
      Console.WriteLine("Request length**********" + request.ContentLength); 
      Console.WriteLine("Up=======" + totalUpload + "Down======" + totalDownload); 
     } 

     Program.comment("Response Status=" + response.StatusCode); 
     string output = ""; 
     if (response != null) 
     { 
      if (response.StatusCode == HttpStatusCode.OK) 
      { 

      // output processing 

      } 
      else 
      { 
       response.Close(); 
      } 
     } 
     Console.WriteLine("Output=" + output); 
     return output; 
    } 

pageFetch(string url,int requestTimeOut)方法在TPL中运行。

回答

1

ContentLength属性包含与响应一起返回的Content-Length头的值。如果Content-Length报头未在响应中设置,则ContentLength设置为值-1。

参照HttpWebResponse.ContentLength Property