在我看来,使用 HttpWebRequest/Response 可以完成的大部分工作也可以通过 WebClient 类完成 . 我在某处读到 WebClient
是 WebRequest/Response
的高级包装器 .
到目前为止,我无法看到 HttpWebRequest/Response
无法通过 WebClient
完成的任何事情,也无法看到HttpWebRequest / Response将为您提供更多"fine-grained"控制 .
什么时候应该使用WebClient? HttpWebRequest/Response
? (显然, HttpWebRequest/Response
是HTTP特定的 . )
如果 HttpWebRequest/Response
是较低级别然后是 WebClient
,那么 HttpWebRequest/Response
我无法用 WebClient
完成什么?
8 回答
WebClient
的另一个缺点是,当您使用它来获取响应文本时,它会忽略HTTPContentType
的charset
值 . 您必须通过Encoding
属性显式设置编码 .“HtttpWebRequest”在.NET 4.5中已经过时了 . 现在,这个类只是内部的 .
一个例子:使用WebClient,在一个请求/响应周期中发布数据并获取已处理的数据似乎是不可能的,但您可以使用HtttpWebRequest执行此操作 .
使用
HttpWebRequest
可以更好地控制请求 . 您可以设置cookie, Headers ,协议等...在响应中,您还可以检索cookie和 HeadersHttpWebRequest
暴露了更多允许细粒度协议控制的东西,例如:是否要使用Keep-Alive,使用什么连接池,是否缓冲写入等 .WebClient
没有公开所有这些(尽管你可以从WebClient
和getaccess子类化到底层的Request对象) .WebClient
对于您只想进行操作的情况很有用(例如:POST / GET /表格上传),并且无法创建和管理HttpWebRequest
,RequestStream
,HttpWebResponse
和响应流 .来自Tim Heuer的博客 - http://timheuer.com/blog/archive/2008/03/14/calling-web-services-with-silverlight-2.aspx
相反,在Silverlight中,您将需要使用WebClient或HttpWebRequest . 有什么不同?这是timheuer版本 . WebClient是一个更简单的实现,可以轻松地执行GET请求并获得响应流 . 当您需要对请求进行更细粒度的控制,需要发送标头或其他自定义时,HttpWebRequest非常适合 .
WebClient类在用户界面线程上运行,因此在从Internet下载数据时,用户界面不响应 . 另一方面,HttpWebRequest类不会阻止用户界面线程,并且您的应用程序是响应式的 . 因此,在要从Internet下载大量数据的应用程序中,或者如果数据源访问速度很慢,则应使用HttpWebRequest类;在所有其他情况下,您应该使用WebClient类 .
HttpWebrquest允许您进行压缩,但Net.WebClient类不支持HTTP压缩