C# 为什么HttpException.GetHttpCode()返回int而不是System.Net.HttpStatusCode?
我知道我可以将结果从类型转换为,但我不喜欢类型转换枚举。特别是因为MSDN文档没有明确说明枚举的值始终是确切的对应http状态代码 我觉得应该再回来 我应该停止抱怨和打字吗C# 为什么HttpException.GetHttpCode()返回int而不是System.Net.HttpStatusCode?,c#,http,http-status-codes,C#,Http,Http Status Codes,我知道我可以将结果从类型转换为,但我不喜欢类型转换枚举。特别是因为MSDN文档没有明确说明枚举的值始终是确切的对应http状态代码 我觉得应该再回来 我应该停止抱怨和打字吗 catch(HttpException ex) { switch((HttpStatusCode)ex.GetHttpCode()) { case HttpStatusCode.NotFound: // Do stuff... break;
catch(HttpException ex)
{
switch((HttpStatusCode)ex.GetHttpCode())
{
case HttpStatusCode.NotFound:
// Do stuff...
break;
// More cases...
}
}
编辑:注意类型为的响应包含错误代码的整数值。int是实际的错误代码。枚举允许错误代码的“友好”表示 我应该停止抱怨和打字吗
catch(HttpException ex)
{
switch((HttpStatusCode)ex.GetHttpCode())
{
case HttpStatusCode.NotFound:
// Do stuff...
break;
// More cases...
}
}
对。或者使用相应的整数值。是的,您应该这样做。最重要的是,因为您自己提供的代码保护您不使用任何整数值或状态号。因此,从技术上讲,枚举值是否与状态号对应并不重要。值得注意的是,HTTP允许自定义状态代码,因此不能保证枚举将包含响应中的值。因此,API返回
int
值而不是尝试使用枚举是明智的。HTTP状态代码不必来自固定列表,尽管它们通常来自固定列表。使用枚举是一种方便。需要枚举是错误的。Hmm,我想知道为什么HttpStatusCode
是一个枚举,而不仅仅是一个具有常量int的静态类。在这里,一个家伙定义了他自己的,能够支持自定义值(webdav?):HttpWebResponse。StatusCode
的类型为HttpStatusCode
。我认为它可能包含未定义的枚举值是令人困惑的。枚举在大多数情况下都很有用:在.NET框架和Http的标准行为的范围内,使用枚举类型很有用。该枚举(根据MSDN)“包含RFC2616中为HTTP 1.1定义的状态代码的值。”我认为它更可能返回自定义错误值,而不是自定义成功值,这就是为什么只有自定义异常类型包含整数字段。不过,这似乎是一个奇怪的、有点不一致的选择!见我对丹回答的评论HttpWebResponse.StatusCode
属于HttpStatusCode
…这很奇怪。在Reflector中,看起来基础整数只是转换为HttpStatusCode
,这意味着它可能有一个枚举中未定义的值。