.NET中的WebClient和HTTPWebRequest类有什么区别?
 WebClient和.NET中的HttpWebRequest类有什么不同? 他们都做了非常相似的事情。 实际上,为什么不把它们合并到一个类中(太多的方法/variables等可能是其中一个原因,但是.NET中有其他类违反了这个规则)。 
谢谢。
WebClient是基于HttpWebRequest构build的更高级别的抽象,用于简化最常见的任务。 例如,如果您想从HttpWebResponse中获取内容,则必须从响应stream中读取:
 var http = (HttpWebRequest)WebRequest.Create("http://example.com"); var response = http.GetResponse(); var stream = response.GetResponseStream(); var sr = new StreamReader(stream); var content = sr.ReadToEnd(); 
 使用WebClient,您只需执行DownloadString : 
 var client = new WebClient(); var content = client.DownloadString("http://example.com"); 
  注意:为了简洁,我省略了两个示例中的using语句。  你一定要小心妥善处理你的Web请求对象。 
一般来说,WebClient对于简单的请求很快而且很脏,而HttpWebRequest对于需要对整个请求进行更多的控制的时候非常有用。
我知道回复的时间太长,但只是作为未来读者的信息目的:
的WebRequest
 System.Object System.MarshalByRefObject System.Net.WebRequest 
  WebRequest是一个抽象的基类。 所以你实际上不直接使用它。 你通过它派生类使用它 – HttpWebRequest和FileWebRequest 。 
 您可以使用WebRequest Create方法来创buildWebRequest一个实例。  GetResponseStream返回data stream 。 
 还有从WebRequest inherit FileWebRequest和FtpWebRequest类。 通常情况下,您将使用WebRequest来完成请求,并根据您的请求将返回值转换为HttpWebRequest , FileWebRequest或FtpWebRequest 。 下面是一个例子: 
例:
 var _request = (HttpWebRequest)WebRequest.Create("http://stackverflow.com"); var _response = (HttpWebResponse)_request.GetResponse(); 
Web客户端
 System.Object System.MarshalByRefObject System.ComponentModel.Component System.Net.WebClient 
  WebClient提供通用操作来sending和receiving来自URI标识的资源的数据。 简而言之,这是HttpWebRequest的更高层次的抽象。 这个“常用操作”就是将WebClient与HttpWebRequest分开来,如下面的示例所示: 
例:
 var _client = new WebClient(); var _stackContent = _client.DownloadString("http://stackverflow.com"); 
 在WebClient实例下还有DownloadData和DownloadFile操作。 这些常见的操作也简化了我们通常对HttpWebRequest所做的代码。 使用HttpWebRequest ,我们必须得到我们请求的响应,实例化StreamReader来读取响应,最后将结果转换为我们期望的types。 使用WebClient ,我们只需简单地调用DownloadData, DownloadFile or DownloadString 。 
 但是请记住, WebClient.DownloadString不考虑您请求的资源的encoding 。 所以,如果你不指定和编码,你最终可能会收到奇怪的字符。 
注意: 基本上“ WebClient与Webrequest相比需要几行代码”
另外WebClient没有超时属性。 这就是问题所在,因为默认值是100秒,这太多了,表示没有Internet连接。
该问题的解决方法是在这里https://stackoverflow.com/a/3052637/1303422