WebClient与HttpWebRequest / HttpWebResponse
在我看来,大多数可以用HttpWebRequest/Response
完成的事情也可以用WebClient
类来完成。 我在某处读到WebClient
是WebRequest/Response
的高级包装器。
到目前为止,我看不到用HttpWebRequest/Response
可以完成的任何事情,而WebClient
无法完成任何事情,HttpWebRequest / Response会给你更多的“细粒度”控制。
什么时候应该使用WebClient和HttpWebRequest/Response
? (显然, HttpWebRequest/Response
是HTTP特定的。)
如果HttpWebRequest/Response
的级别比WebClient
低,那么我可以用HttpWebRequest/Response
完成WebClient
无法完成的工作?
使用HttpWebRequest
让你更多地控制请求。 您可以设置cookie,标题,协议等等。在响应中,您也可以检索cookie和标题
HttpWebRequest
公开了更多的东西,让你细粒度的协议控制,例如:是否要使用Keep-Alive,使用什么连接池,是否缓冲写入等。
WebClient
不公开所有这些(尽pipe您可以从WebClient
子类化并通过基础的Request对象)。
WebClient
对于那些只想执行操作的情况(例如:POST / GET / Form上传)很有用,并且不能为创build和pipe理HttpWebRequest
, RequestStream
, HttpWebResponse
和响应stream而烦恼。
来自Tim Heuer博客 – http://timheuer.com/blog/archive/2008/03/14/calling-web-services-with-silverlight-2.aspx
而在Silverlight中,您将需要使用WebClient或HttpWebRequest。 有什么不同? 这是timheuer版本。 WebClient是一个更容易实现GET请求并获得响应stream的简单实现。 HttpWebRequest非常适合需要对请求进行更细粒度的控制时,需要发送标头或其他自定义。
WebClient类在用户界面线程上运行,因此在从Internet下载数据时用户界面不响应。 另一方面, HttpWebRequest类不会阻塞用户界面线程,并且您的应用程序是响应式的。 因此,在从互联网下载大量数据的应用程序中,或者数据源访问缓慢的情况下,应使用HttpWebRequest类; 在所有其他情况下,您应该使用WebClient类。
在.NET 4.5中,“HtttpWebRequest”已经过时了。 现在,这个class只是内部的。
还有一件事HttpWebrquest允许你压缩,但他Net.WebClient类不支持HTTP压缩
WebClient
另一个缺点是,当您使用它获取响应文本时,它将忽略HTTP ContentType
的charset
值。 您必须通过Encoding
属性显式设置编码。
举一个例子:在一个请求/响应循环中发布数据并获取处理的数据对于WebClient来说似乎是不可能的,但是您可以使用HtttpWebRequest来完成。