2013-06-04 167 views

回答

10

嗯,這有點到具體子類 - 但我從來沒有見過它這樣做的任何的子類,它不是記錄作爲一個有效的返回值。我從來沒有看到任何編寫防禦性代碼來檢查這一點,我不希望這樣做。這並不是說這樣的代碼不存在,但我不認爲這是必要的。

如果響應中沒有內容(但響應成功),我希望任何好的實現都返回一個空的流。

+0

你在哪裏發現「null」沒有記錄爲有效的返回值?你能給我鏈接嗎? – iotaSingh

+3

@iotaSingh:我怎樣才能給你一個鏈接?我說過*沒有記錄*。我沒有說它被記錄爲不是有效的返回值,我說它沒有被記錄爲有效的返回值。那些*非常*不同的陳述。 –

3

沒有從WebResponse派生的內置類型,特別是HttpWebResponse,可以返回null。這種迷信的觀念誤導了許多開發者。不要檢查null。這樣的代碼是死代碼。

與返回空流相比,甚至意味着什麼?這根本不符合邏輯。

另外,GetResponse()不能返回null。再次,這是什麼意思?! HTTP協議不支持「空響應」的概念。如果由於庫缺陷而發生這種情況,無論如何都無法處理這種情況。任何這樣的檢查都無濟於事。

可以創建從WebResponse派生的類,它返回一個瘋狂的值,如null。沒有內置的類可以這樣做,它應該被認爲是一個返回null的錯誤。衍生自WebResponse的類非常罕見。我從未見過一個。

這裏有一個很好用的代碼模式:

var request = WebRequest.Create("http://example.org/"); 

using (var response = request.GetResponse()) 
using (var responseStream = response.GetResponseStream()) 
using (var responseReader = new StreamReader(responseStream)) 
{ 
    var contents = responseReader.ReadToEnd(); 
} 

它演示瞭如何簡潔和安全地讀取使用HttpWebRequest的HTTP URL的內容。

相關問題