在我看来,使用 HttpWebRequest/Response
类可以完成大部分 WebClient
。我在某处读到WebClient
是WebRequest/Response
的高级包装器
到目前为止,我无法看到HttpWebRequest/Response
无法用WebClient
完成的任何事情,也无法看到HttpWebRequest / Response将为您提供更多“细粒度”控件。
我何时应该使用WebClient和何时HttpWebRequest/Response
? (显然,HttpWebRequest/Response
是特定于HTTP的。)
如果HttpWebRequest/Response
的级别低于WebClient
,那么使用HttpWebRequest/Response
无法完成的WebClient
可以实现哪些目标?
答案 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执行此操作。