首页 文章

WebClient与HttpWebRequest / HttpWebResponse

提问于
浏览
131

在我看来,使用 HttpWebRequest/Response 可以完成的大部分工作也可以通过 WebClient 类完成 . 我在某处读到 WebClientWebRequest/Response 的高级包装器 .
到目前为止,我无法看到 HttpWebRequest/Response 无法通过 WebClient 完成的任何事情,也无法看到HttpWebRequest / Response将为您提供更多"fine-grained"控制 .

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

如果 HttpWebRequest/Response 是较低级别然后是 WebClient ,那么 HttpWebRequest/Response 我无法用 WebClient 完成什么?

8 回答

  • 5

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

  • 2

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

  • 85

    一个例子:使用WebClient,在一个请求/响应周期中发布数据并获取已处理的数据似乎是不可能的,但您可以使用HtttpWebRequest执行此操作 .

  • 12

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

  • 54

    HttpWebRequest 暴露了更多允许细粒度协议控制的东西,例如:是否要使用Keep-Alive,使用什么连接池,是否缓冲写入等 .

    WebClient 没有公开所有这些(尽管你可以从 WebClient 和getaccess子类化到底层的Request对象) .

    WebClient 对于您只想进行操作的情况很有用(例如:POST / GET /表格上传),并且无法创建和管理 HttpWebRequestRequestStreamHttpWebResponse 和响应流 .

  • 5

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

    相反,在Silverlight中,您将需要使用WebClient或HttpWebRequest . 有什么不同?这是timheuer版本 . WebClient是一个更简单的实现,可以轻松地执行GET请求并获得响应流 . 当您需要对请求进行更细粒度的控制,需要发送标头或其他自定义时,HttpWebRequest非常适合 .

  • 14

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

  • 5

    HttpWebrquest允许您进行压缩,但Net.WebClient类不支持HTTP压缩

相关问题