2011-02-14 45 views

回答

205

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(); 

隨着Web客戶端,你只是做DownloadString

var client = new WebClient(); 
var content = client.DownloadString("http://example.com"); 

注:我爲了簡潔起見,省略了兩個示例中的using聲明。你一定要小心妥善處理你的web請求對象。

一般來說,WebClient適用於快速和骯髒的簡單請求,而HttpWebRequest適用於需要對整個請求進行更多控制的情況。

+31

以上是事實,下面是認爲:兩者都是可怕的,因爲HttpWebRequest的壞了。它處理基本身份驗證錯誤,需要像「ServicePointManager.Expect100Continue = false」這樣的奇怪解決方法,執行其他非標準事務並且有許多怪癖和特質。我開始使用RestSharp來幫助解決這些問題。 – 2011-02-14 02:30:41

+2

另請注意,WebClient是一個組件,因此您可以將它從VS工具窗口拖放到窗體中,並且可以在窗體中使用它。 – feroze 2011-02-14 21:36:31

+1

我想我剛剛嘗試使用httpwebrequest和基本身份驗證。我可以同意這一點。所以你製作了RestSharp?涼! – dotnetdev 2011-02-15 01:19:19

23

另外WebClient沒有超時屬性。這就是問題所在,因爲默認值是100秒,這太多了,無法顯示是否沒有互聯網連接。

解決方法這個問題是在這裏https://stackoverflow.com/a/3052637/1303422

24

我知道它太長時間回覆,但只是爲未來的讀者信息目的:

的WebRequest

System.Object 
    System.MarshalByRefObject 
     System.Net.WebRequest 

WebRequest是抽象基類。所以你實際上不直接使用它。你通過它派生類使用它 - HttpWebRequestFileWebRequest

您可以使用創建方法WebRequest來創建WebRequest的實例。 GetResponseStream返回data stream

還有FileWebRequestFtpWebRequestinheritWebRequest。通常情況下,您可以使用WebRequest來提出請求,並根據您的請求將退貨轉換爲HttpWebRequest,FileWebRequestFtpWebRequest。下面是一個例子:

實施例:

var _request = (HttpWebRequest)WebRequest.Create("http://stackverflow.com"); 
var _response = (HttpWebResponse)_request.GetResponse(); 

Web客戶端

System.Object 
     System.MarshalByRefObject 
      System.ComponentModel.Component 
       System.Net.WebClient 

WebClient提供共同操作以sendingreceiving數據從被URI標識的資源。簡而言之,它是HttpWebRequest的更高級抽象。這種「普通操作」是什麼區分WebClientHttpWebRequest從,如下面的示例中還示出:

實施例:

var _client = new WebClient(); 
var _stackContent = _client.DownloadString("http://stackverflow.com"); 

還有下WebClient實例DownloadDataDownloadFile操作。這些常見操作也簡化了我們通常使用HttpWebRequest所做的代碼。使用HttpWebRequest,我們必須得到我們請求的響應,實例化StreamReader來讀取響應,最後將結果轉換爲我們期望的任何類型。有了WebClient,我們只需撥打DownloadData, DownloadFile or DownloadString即可。

但請記住,WebClient.DownloadString不會考慮您請求的資源的encoding。所以,如果你不指定和編碼,你最終可能會收到奇怪的字符。

注:基本上「WebClient的需要幾行代碼相比,的WebRequest

相關問題