3

我有一個應用程序,它有時必須向服務器發出一些請求,以查看這些請求是否被正確阻止。換句話說,預計服務器答案是403禁止。如何避免WebException for 403 Forbidden響應?

用一塊這樣的代碼:

HttpWebRequest httpRequest = (HttpWebRequest)WebRequest.Create(protectedPage); 
httpRequest.Method = WebRequestMethods.Http.Head; 
WebResponse response = HttpRequest.GetResponse(); 

一個WebException被套上的最後一行。

當分析代碼時,try/catch塊中的這個異常具有我想要避免的性能影響。

有沒有辦法檢查服務器響應,期待403,而不必捕捉異常(但避免直接使用套接字)?

+0

我沒有看到捕捉該異常會如何影響性能。我的意思是,與接收網頁需要多長時間相比,這無需任何費用。 – Will 2010-12-05 04:38:26

回答

3

不幸的是,這是一個vexing exception在框架中,並且沒有辦法避免它(同時仍然使用HttpWebRequest類)。但是,正如High指出的那樣,這種異常處理將需要幾十秒的時間,而Web請求本身需要幾毫秒(最好),所以不要擔心。

WebException對象具有包含響應的Response屬性;當您處理異常時,處理該對象(以避免連接泄漏)很重要。

+0

+1促進Eric Lippert的異常分類 – Tergiver 2010-12-05 14:11:38

+0

@Tergiver,我認爲這是一種情況,一個用例的令人煩惱的異常是另一個用例的外生異常。如果你沒有權限讀取文件,`File.Open`會拋出,`HttpWebRequest`在這裏做類似的事情。 – 2014-08-28 21:55:04

2

概要分析中需要花費的時間可能不是異常捕捉部分,而是來自網站的實際響應。

WebException.Status屬性將爲您提供HTTP響應的狀態碼,您可以根據該響應進行進一步處理。