我正在尝试处理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方法有没有变化?有没有人见过类似的问题?
答案 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
因此,根据您对此字符串或另一个字符串的响应,但代码始终相同。