Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么HttpException.GetHttpCode()返回int而不是System.Net.HttpStatusCode?_C#_Http_Http Status Codes - Fatal编程技术网

C# 为什么HttpException.GetHttpCode()返回int而不是System.Net.HttpStatusCode?

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;

我知道我可以将结果从类型转换为,但我不喜欢类型转换枚举。特别是因为MSDN文档没有明确说明枚举的值始终是确切的对应http状态代码

我觉得应该再回来

我应该停止抱怨和打字吗

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
,这意味着它可能有一个枚举中未定义的值。