WebClient与HttpWebRequest / HttpWebResponse

时间:2009-11-07 20:55:49

标签: .net httpwebrequest webclient httpwebresponse

在我看来,使用 HttpWebRequest/Response 类可以完成大部分 WebClient 。我在某处读到WebClientWebRequest/Response的高级包装器  到目前为止,我无法看到HttpWebRequest/Response无法用WebClient完成的任何事情,也无法看到HttpWebRequest / Response将为您提供更多“细粒度”控件。

我何时应该使用WebClient和何时HttpWebRequest/Response? (显然,HttpWebRequest/Response是特定于HTTP的。)

如果HttpWebRequest/Response的级别低于WebClient,那么使用HttpWebRequest/Response无法完成的WebClient可以实现哪些目标?

8 个答案:

答案 0 :(得分:86)

使用HttpWebRequest可以更好地控制请求。您可以设置cookie,标题,协议等...在响应中,您还可以检索cookie和标题

答案 1 :(得分:54)

HttpWebRequest暴露了更多允许细粒度协议控制的东西,例如:是否要使用Keep-Alive,使用什么连接池,是否缓冲写入等等。

WebClient没有公开所有这些(尽管你可以从WebClient继承并getaccess到底层的Request对象。)

WebClient对于您只想进行操作的情况非常有用(例如:POST / GET /表格上传),并且无法创建和管理HttpWebRequest,{{1} },RequestStream和响应流。

答案 2 :(得分:14)

来自Tim Heuer的博客 - http://timheuer.com/blog/archive/2008/03/14/calling-web-services-with-silverlight-2.aspx

相反,在Silverlight中,您需要使用WebClient或HttpWebRequest。有什么不同?这是timheuer版本。 WebClient是一个更简单的实现,可以轻松地执行GET请求并获得响应流。当您需要对请求进行更细粒度的控制,需要发送标头或其他自定义时,HttpWebRequest非常适用。

答案 3 :(得分:12)

WebClient 类在用户界面线程上运行,因此在从Internet下载数据时,用户界面无响应。另一方面, HttpWebRequest 类不会阻止用户界面线程,并且您的应用程序是响应式的。 因此,在要从Internet下载大量数据的应用程序中,或者如果数据源访问速度很慢,则应使用HttpWebRequest类;在所有其他情况下,您应该使用WebClient类。

答案 4 :(得分:5)

HttpWebrquest允许你进行压缩,但Net.WebClient类不支持HTTP压缩

答案 5 :(得分:5)

WebClient的另一个缺点是,当您使用它来获取响应文本时,它会忽略HTTP ContentType的{​​{1}}值。您必须通过charset属性显式设置编码。

答案 6 :(得分:5)

在.NET 4.5中,“HtttpWebRequest”已经过时。现在,这个班级只是内部的。

答案 7 :(得分:2)

一个例子:使用WebClient,在一个请求/响应周期中发布数据并获取已处理的数据似乎是不可能的,但您可以使用HtttpWebRequest执行此操作。