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方法有什么变化吗?有人见过类似的问题吗?如果您查看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
所以,取决于你得到的响应是这个字符串还是另一个,但是代码总是一样的