如何检查int是否是.NET中合法的HttpStatusCode?

时间:2012-04-29 06:49:30

标签: c# .net enumeration http-status-codes

我希望确保一个人提供的号码是合法的HttpStatusCode

起初我考虑过使用Enum.TryParse(..)Enum.Parse(..)但是我可能会在提供一些错误数据的情况下得到无效结果。

例如

In: Enum.Parse(typeof (HttpStatusCode), "1")
Out: 1

In: Enum.Parse(typeof (HttpStatusCode), "400")
Out: BadRequest

In: Enum.Parse(typeof (HttpStatusCode), "aaa")
Out: System.ArgumentException: Requested value 'aaa' was not found.

好的,所以如果我传入一个错误的 aaa 值,我会收到System.Argument异常。但是当我传入一个数字1(作为文本,而不是一个int)时,我得到的返回值为1.我本来期望这会失败并抛出异常。

传递400 的值会返回正确的BadRequest枚举。

任何想法,伙计们?

2 个答案:

答案 0 :(得分:10)

而不是尝试解析值只是我们的IsDefined方法

Enum.IsDefined(typeof(HttpStatusCode),value)

“1”的情况不会失败的原因是你可以对枚举进行二进制算术运算。这对于标志使用了很多,因此枚举中没有具体的值可能仍然是有效值

答案 1 :(得分:5)

documented behaviour

  

如果 value 是与 enumType 的命名常量不对应的名称,则该方法将抛出ArgumentException。如果 value 是不表示 enumType 枚举的基础值的整数的字符串表示形式,则该方法返回其基础值为 value <的枚举成员/ em>转换为整数类型。如果不希望出现这种情况,请调用IsDefined方法以确保整数的特定字符串表示形式实际上是 enumType 的成员。