2016-04-08 137 views
0

下面是從Internet URI源獲取Http Web響應的C#代碼片段。 當客戶端無法獲得響應時,它會引發異常。
我很想知道是否有任何條件沒有發生異常 但HttpStatusCode不正確(即不是範圍200-299)。在HttpRequest.GetResponse中拋出異常

基本上我需要知道什麼是不引發異常的不良狀態碼。

try{ 
HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
catch{} 
+0

不能完全確定你所定義的那些'重新問,但是當你捕捉到它並且什麼都不做時,它永遠不會拋出異常(實際上忽略所有異常)。您在GetReponse行之後也丟失了一個右大括號。您可以在[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes)上看到狀態代碼列表 – Tone

回答

2

4xx範圍的任何狀態代碼被定義爲一個客戶機錯誤,將導致ProtocolException。 (400-錯誤請求,401-未經授權等)
5xx範圍內的任何結果都被定義爲服務器錯誤,並且將導致CommunicationException。 (500-內部服務器錯誤,502-錯誤網關等)。

例如,如果要實施重試機制,這非常有用。如果例外是CommunicationException,因爲這可能是一個瞬時錯誤(連接失敗,DNS解析失敗),但是如果例外是ProtocolException,那麼重試是有意義的,然後重試是多餘的,因爲它應該總是失敗。

無論任何其他狀態代碼被認爲是一個錯誤的情況下或不依賴於客戶端和服務器,但上面的合同是由HTTP標準

List of HTTP status codes

+0

3xx範圍內的狀態代碼如何? – user334223

+0

3xx是重定向並且是有效的非錯誤響應(不會拋出異常)。如果'AllowAutoRedirect'設置爲true,那麼這將是透明的,你的請求將被轉發到重定向位置。如果它設置爲false,那麼你可以決定如何處理來自服務器的重定向響應。如果在你的情況下重定向不是預期的結果,並且被認爲是錯誤,你可以這樣處理,雖然通常情況並非如此 – Itsik