【问题标题】:HttpWebResponse StatusCode toStringHttpWebResponse 状态码 toString
【发布时间】:2014-06-22 07:34:25
【问题描述】:

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

    因此,根据您得到的响应是这个字符串还是另一个字符串,但代码始终相同。

    【讨论】:

      【解决方案2】:

      如果您查看 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?

      【讨论】:

      • 好的,非常感谢。但是我仍然想知道为什么我会始终如一地获得“重定向”字符串,而在另一台机器上我们始终获得“找到”字符串。不同之处在于 .net 版本。这有什么影响吗?
      • 就文档所说的,它是不确定的。他们实现该功能的方式可能因版本而异,但他们不承诺将显示哪个名称。我建议使用Enum.GetNames() 方法,然后将它们全部显示(或者在此时选择要显示的名称)。
      猜你喜欢
      • 2010-11-22
      • 2012-07-31
      • 1970-01-01
      • 2023-04-04
      • 2019-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多