.NET中的WebClient
和HttpWebRequest
類有什麼不同?他們都做了非常類似的事情。事實上,爲什麼他們不合併成一個類(太多的方法/變量等可能是其中一個原因,但.NET中有其他類違反該規則)。.NET中的WebClient和HTTPWebRequest類有什麼不同?
謝謝。
.NET中的WebClient
和HttpWebRequest
類有什麼不同?他們都做了非常類似的事情。事實上,爲什麼他們不合併成一個類(太多的方法/變量等可能是其中一個原因,但.NET中有其他類違反該規則)。.NET中的WebClient和HTTPWebRequest類有什麼不同?
謝謝。
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適用於需要對整個請求進行更多控制的情況。
另外WebClient沒有超時屬性。這就是問題所在,因爲默認值是100秒,這太多了,無法顯示是否沒有互聯網連接。
解決方法這個問題是在這裏https://stackoverflow.com/a/3052637/1303422
我知道它太長時間回覆,但只是爲未來的讀者信息目的:
的WebRequest
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();
Web客戶端
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");
還有下WebClient
實例DownloadData
和DownloadFile
操作。這些常見操作也簡化了我們通常使用HttpWebRequest
所做的代碼。使用HttpWebRequest
,我們必須得到我們請求的響應,實例化StreamReader
來讀取響應,最後將結果轉換爲我們期望的任何類型。有了WebClient
,我們只需撥打DownloadData, DownloadFile or DownloadString
即可。
但請記住,WebClient.DownloadString
不會考慮您請求的資源的encoding
。所以,如果你不指定和編碼,你最終可能會收到奇怪的字符。
注:基本上「WebClient的需要幾行代碼相比,的WebRequest」
以上是事實,下面是認爲:兩者都是可怕的,因爲HttpWebRequest的壞了。它處理基本身份驗證錯誤,需要像「ServicePointManager.Expect100Continue = false」這樣的奇怪解決方法,執行其他非標準事務並且有許多怪癖和特質。我開始使用RestSharp來幫助解決這些問題。 – 2011-02-14 02:30:41
另請注意,WebClient是一個組件,因此您可以將它從VS工具窗口拖放到窗體中,並且可以在窗體中使用它。 – feroze 2011-02-14 21:36:31
我想我剛剛嘗試使用httpwebrequest和基本身份驗證。我可以同意這一點。所以你製作了RestSharp?涼! – dotnetdev 2011-02-15 01:19:19