使用强类型属性查询String到Object

时间:2010-06-07 18:30:13

标签: c#

假设我们在网站上跟踪了20个查询字符串参数。每个请求只有这20个参数的子集。但我们肯定会查找每个请求中的所有/大多数参数。

我们不想在每次查找特定参数时循环访问集合,或者在代码中的管道下方。因此,我们遍历查询字符串集合,将字符串值转换为各自的类型(枚举,整数,字符串等),填充到添加到上下文中的QueryString对象。

在那之后,我们将在QueryString对象中有一个强类型属性,它易于使用,我们维护一个标准。

public class QueryString
{
    public int Key1{ get; private set; }
    public SomeType Key2{ get; private set; }

    private QueryString() { }

    public static QueryString GetQueryString()
    {
        QueryString l_QS = new QueryString();

        foreach (string l_Key in HttpContext.Current.Request.QueryString.AllKeys)
        {
            switch (l_Key)
            {
                case "key1":
                    l_QS.Key1= DoSomething(l_Key, HttpContext.Current.Request.QueryString[l_Key]);
                    break;
                case "key2":
                    l_QS.Key2 = DoAnotherThing(l_Key, HttpContext.Current.Request.QueryString[l_Key]);
                    break;
            }
        }

        return l_QS;
    }
}

实现这一目标的任何其他解决方案?

2 个答案:

答案 0 :(得分:0)

我不确定您是否使用它,但ASP.NET MVC将为您处理此问题。您可以在操作的签名中定义所有参数,而您未收到的任何参数都将为空。

答案 1 :(得分:0)

另一个解决方案可能是使用自定义ToString()方法的自定义枚举类(每个参数有一个值)。然后,您可以反向查找字符串以获取枚举值,在切换案例中使用它。如果参数无效,则在反向查找期间可能会抛出异常。