2012-10-01 72 views
4

我知道我只能將結果從GetHttpCode()改爲HttpStatusCode,但我不喜歡使用類型枚舉。尤其是因爲MSDN文檔沒有明確說明枚舉的值始終是完全相應的http狀態代碼。爲什麼HttpException.GetHttpCode()返回一個int而不是System.Net.HttpStatusCode?

我覺得GetHttpCode()應該只是返回HttpStatusCode

我應該停止抱怨和類型轉換嗎?

catch(HttpException ex) 
{ 
    switch((HttpStatusCode)ex.GetHttpCode()) 
    { 
     case HttpStatusCode.NotFound: 
      // Do stuff... 
      break; 
     // More cases... 
    } 
} 

編輯:注意,HttpWebResponse.StatusCode的類型爲HttpStatusCode

回答

8

值得注意的是,HTTP允許自定義狀態碼,所以不保證枚舉將包含響應中的值。由於這個原因,API返回int的值而不是嘗試使用枚舉是明智的。

+0

嗯,我想知道爲什麼'HttpStatusCode'是一個枚舉,然後不只是一個靜態類與恆定的整數。這裏一個人定義他自己能夠支持自定義值(webdav?):http://devio.wordpress.com/2007/11/14/http-status-codes-in-c/。 'HttpWebResponse.StatusCode' *是* HttpStatusCode類型的*。我認爲它可能包含未定義的枚舉值是令人困惑的。 –

+0

枚舉在大多數情況下很有用:在.NET框架和Http的*標準*行爲的邊界內,有一個Enum類型可以使用。該枚舉(根據MSDN)「包含HTTP 1.1中RFC 2616中定義的狀態代碼的值。」我想,想要返回一個自定義*錯誤*值比自定義*成功*值更有可能,這就是爲什麼只有自定義異常類型包含整數字段的原因。儘管如此,這似乎是一個奇怪的,有點不一致的選擇! –

+0

我想我對Java的頭腦仍然非常關注枚舉。 –

0

甲響應包含錯誤代碼的整數值。 int是實際的錯誤代碼。枚舉允許錯誤代碼的「友好」表示。

0

我應該停止抱怨和類型轉換嗎?

是的。或者使用相應的整數值。

0

是的,你應該這樣做。最重要的是,由於您自己提供的代碼可以避免使用任何整數值或狀態號碼。所以從技術上講,這並不重要,枚舉值是否與狀態數字對應。

1

HTTP狀態碼不一定來自固定列表,儘管他們通常會這樣做。使用枚舉是一種方便。要求枚舉是錯誤的。

+0

查看我對丹的回答的評論。 'HttpWebResponse.StatusCode' *是* HttpStatusCode類型的*。 –

+0

...那很奇怪。在Reflector中看起來,它看起來像底層整數只是轉換爲'HttpStatusCode',這意味着它可能有一個沒有在枚舉中定義的值。 –

相關問題