HttpWebResponse StatusCode toString

时间:2014-05-05 21:11:37

标签: c# http-status-code-302

我正在尝试处理302重定向响应。我看到HttpStatusCode的toString方法的不同行为。

HttpWebResponse response = (HttpWebResponse) _webRequest.GetResponse();
if (response.StatusCode != HttpStatusCode.OK)
        throw new TestException(TestException.HttpErrorClass,response.StatusCode.ToString(),"");

问题是当我调试并查看响应对象时,StatusCode显示" FOUND"状态。但是当我对这段代码进行处理时,我得到了#34; Redirect"串。 此外,它不会一直返回"重定向"字符串,它有时返回" FOUND"我的同事的机器上的字符串。

.net 4.0到.net 4.5的toString方法有没有变化?有没有人见过类似的问题?

2 个答案:

答案 0 :(得分:3)

如果你看一下HttpStatusCode的定义,你会发现值302有多个枚举成员。根据文档,当存在多个定义时,结果字符串值将不会始终相同。看一下GetName方法(这就是ToString的功能)。

http://msdn.microsoft.com/en-us/library/system.enum.getname(v=vs.110).aspx

  

如果多个枚举成员具有相同的基础值,则GetName方法保证它将返回其中一个枚举成员的名称。但是,它不保证它始终返回相同枚举成员的名称。因此,当多个枚举成员具有相同的值时,您的应用程序代码永远不应该依赖于返回特定成员名称的方法。

请看一下这个答案,以获得更多见解:Why is it okay for an enum to have two different names with the same numeric value?

答案 1 :(得分:1)

根据Nathan的回答,HttpStatusCode枚举中确实有两个条目。 见http://referencesource.microsoft.com/#System/net/System/Net/HttpStatusCode.cs#9b95c882b40ef96e

因此,根据您对此字符串或另一个字符串的响应,但代码始终相同。