我正在尝试处理302重定向响应。我看到了toString方法HttpStatusCode的不同行为。
HttpWebResponse response = (HttpWebResponse) _webRequest.GetResponse();
if (response.StatusCode != HttpStatusCode.OK)
throw new TestException(TestException.HttpErrorClass,response.StatusCode.ToString(),"");问题是当我调试和查看响应对象时,StatusCode是显示“找到”状态的。但是,当我对这段代码执行toString时,就会得到“重定向”字符串。而且,它并不总是返回“重定向”字符串,它有时会在我同事的机器上返回“找到”字符串。
toString方法是否有从.net 4.0到.net 4.5的任何更改?有没有人看到过类似的问题?
发布于 2014-05-05 21:16:17
如果您查看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?
发布于 2014-05-05 21:23:28
根据内森的回答,HttpStatusCode-枚举中确实有两个条目。请参阅http://referencesource.microsoft.com/#System/net/System/Net/HttpStatusCode.cs#9b95c882b40ef96e
因此,取决于您得到的响应是这个字符串还是另一个字符串,但是代码总是相同的。
https://stackoverflow.com/questions/23481972
复制相似问题