Answers:
WebClient是基于HttpWebRequest的高层抽象,可简化最常见的任务。例如,如果要从HttpWebResponse中获取内容,则必须从响应流中读取:
var http = (HttpWebRequest)WebRequest.Create("http://example.com");
var response = http.GetResponse();
var stream = response.GetResponseStream();
var sr = new StreamReader(stream);
var content = sr.ReadToEnd();
使用WebClient,您只需执行以下操作DownloadString
:
var client = new WebClient();
var content = client.DownloadString("http://example.com");
注意:using
为简洁起见,我在两个示例中都省略了声明。您绝对应该注意正确处理Web请求对象。
通常,WebClient适用于快速而肮脏的简单请求,而HttpWebRequest适用于需要对整个请求进行更多控制的情况。
HttpClient
,.NET 4.5附带了一个新的播放器,它可能(也可能不会?)解决上述一些麻烦……
using (WebClient client = new WebClient())
而且WebClient没有超时属性。这就是问题所在,因为dafault值为100秒,这太多了,无法显示是否没有Internet连接。
该问题的解决方法在这里https://stackoverflow.com/a/3052637/1303422
我知道回复时间太长,但只是为了将来读者了解情况而已:
Web请求
System.Object
System.MarshalByRefObject
System.Net.WebRequest
的WebRequest
是一个抽象基类。因此,您实际上并不直接使用它。您可以通过它的派生类- HttpWebRequest
和使用它FileWebRequest
。
您使用的创建方法WebRequest
来创建的实例WebRequest
。GetResponseStream
返回data stream
。
也有FileWebRequest
和FtpWebRequest
类,inherit
从WebRequest
。通常情况下,你会用WebRequest
,好了,做一个请求,并将其转换回任HttpWebRequest
,FileWebRequest
或FtpWebRequest
,取决于您的要求。下面是一个示例:
例:
var _request = (HttpWebRequest)WebRequest.Create("http://stackverflow.com");
var _response = (HttpWebResponse)_request.GetResponse();
网络客户端
System.Object
System.MarshalByRefObject
System.ComponentModel.Component
System.Net.WebClient
WebClient
提供对由标识的资源的通用操作sending
并提供receiving
数据URI
。简而言之,它是的更高层次的抽象HttpWebRequest
。这种“共同行动”是什么区分WebClient
从HttpWebRequest
,如下面的示例中也显示:
例:
var _client = new WebClient();
var _stackContent = _client.DownloadString("http://stackverflow.com");
实例中还有DownloadData
和DownloadFile
操作WebClient
。这些常用操作还简化了我们通常使用的代码HttpWebRequest
。使用HttpWebRequest
,我们必须获取请求的响应,实例化StreamReader
以读取响应,最后将结果转换为我们期望的任何类型。有了WebClient
,我们只是简单地打电话DownloadData, DownloadFile or DownloadString
。
但是,请记住,WebClient.DownloadString
它不会考虑encoding
您请求的资源。因此,如果不指定和编码,您可能最终会收到奇怪的字符。
注意: 基本上,“ WebClient与Webrequest相比需要几行代码”
ServicePointManager.Expect100Continue = false
,做其他非标准的事情,并且有许多怪癖和特质。我启动RestSharp来帮助解决这些问题。