137

在我看来,大多数可以通过课堂完成的事情HttpWebRequest/Response也可以完成WebClient。我在某处读到WebClientWebRequest/Response.
到目前为止,我看不到任何可以用HttpWebRequest/ResponseHttpWebRequest/Response无法完成的事情,也看不到WebClientHttpWebRequest/Response 会给你更多“细粒度”控制的地方。

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

如果HttpWebRequest/Response是较低的水平WebClient,我可以用什么来完成HttpWebRequest/Response我无法完成的事情WebClient

4

8 回答 8

91

使用HttpWebRequest使您可以更好地控制请求。你可以设置cookies、headers、protocol等……在响应中,你也可以检索cookies和headers

于 2009-11-07T21:01:54.637 回答
56

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

WebClient不会公开所有这些(尽管您可以从WebClient底层 Request 对象继承和获取访问权限)。

WebClient对于您只想进行操作(例如:POST/GET/Form 上传)而无需费心创建和管理HttpWebRequestRequestStreamHttpWebResponse和响应流的情况很有用。

于 2009-11-08T16:14:13.877 回答
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 非常有用。

于 2009-11-07T21:02:46.113 回答
13

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

于 2011-11-23T04:45:47.373 回答
6

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

于 2013-02-09T02:37:39.103 回答
5

HttpWebrquest 允许您进行压缩的另一件事,但他的 Net.WebClient 类不支持 HTTP 压缩

于 2012-06-01T01:30:06.273 回答
5

“HTTPWebRequest”在 .NET 4.5 中已过时。现在,这个类只是内部的。

于 2015-01-27T19:28:59.680 回答
2

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

于 2010-04-30T07:08:41.533 回答