WebClient 与 HttpWebRequest/HttpWebResponse

在我看来,用 HttpWebRequest/Response所能完成的大部分工作也可以用 WebClient类来完成。我在哪里读到过 WebClientWebRequest/Response的高级包装器。
到目前为止,我看不出 HttpWebRequest/Response可以完成什么 WebClient不能完成的事情,也看不出 HttpWebRequest/Response 在哪里可以提供更多的“细粒度”控制。

我什么时候应该使用 WebClient,什么时候应该使用 HttpWebRequest/Response? (显然,HttpWebRequest/Response是 HTTP 特有的。)

如果 HttpWebRequest/Response是低于 WebClient的水平,那么我能用 HttpWebRequest/Response完成什么我不能用 WebClient完成的事情呢?

54858 次浏览

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

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

相反,在 Silverlight 中,你会希望使用 WebClient 或 HttpWebRequest。有什么区别吗?这是 Timheuer 的版本。WebClient 是一个更简单的实现,它可以轻松地处理 GET 请求并获得响应流。当您需要对请求进行更细粒度的控制,需要发送头或其他定制时,HttpWebRequest 非常适合。

HttpWebRequest公开了更多允许您进行细粒度协议控制的内容,例如: 您是否想要使用 Keep-Alive,使用什么连接池,是否缓冲写入,等等。

WebClient并不公开所有这些类(尽管您可以从 WebClient继承子类并访问底层 Request 对象)。

对于那些只需要执行操作(例如: POST/GET/Form 上传)并且不需要创建和管理 HttpWebRequestRequestStreamHttpWebResponse和响应流的情况,WebClient非常有用。

一个例子: 用 WebClient 在一个请求/响应周期内发布数据并获取已处理数据似乎是不可能的,但是您可以用 HtttpWebRequest 做到这一点。

网络客户端类在用户界面线程上运行,因此当从 Internet 下载数据时,用户界面没有响应。另一方面,HttpWebRequest类不阻塞用户界面线程,并且应用程序是响应的。 因此,在需要从 Internet 下载大量数据的应用程序中,或者数据源访问速度较慢的情况下,应该使用 HttpWebRequest 类; 在其他情况下,应该使用 WebClient 类。

还有一件事情 Httpwebquest 允许你压缩,但是 Net. WebClient 类不支持 HTTP压缩

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

“ HtttpWebRequest”在.NET 4.5中已经过时了。