2012-10-01 73 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',这意味着它可能有一个没有在枚举中定义的值。 –

相关问题