HttpWebResponse StatusCode toString

本文关键字:toString StatusCode HttpWebResponse | 更新日期: 2023-09-27 18:01:53

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

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

问题是当我调试并查看响应对象时,StatusCode显示"FOUND"状态。但是当我对这个代码执行toString时,我得到"Redirect" String。此外,它不始终返回"重定向"字符串,它有时返回"FOUND"字符串在我的同事的机器上。

从。net 4.0到。net 4.5, toString方法有什么变化吗?有人见过类似的问题吗?

HttpWebResponse StatusCode toString

如果您查看HttpStatusCode的定义,您会发现值302有多个枚举成员。根据文档,当有多个定义时,结果字符串值将不总是相同的。看一下GetName方法(ToString基本上就是这么做的)。

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

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

看一下这个答案,以获得更多的见解:为什么一个枚举可以有两个不同的名称和相同的数值?

根据Nathan的回答,在HttpStatusCode-enumeration中确实有两个条目。请参见http://referencesource.microsoft.com/系统/net/System/Net/HttpStatusCode.cs # 9 b95c882b40ef96e

所以,取决于你得到的响应是这个字符串还是另一个,但是代码总是一样的