假设我们在网站上跟踪了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;
}
}
实现这一目标的任何其他解决方案?
答案 0 :(得分:0)
我不确定您是否使用它,但ASP.NET MVC将为您处理此问题。您可以在操作的签名中定义所有参数,而您未收到的任何参数都将为空。
答案 1 :(得分:0)
另一个解决方案可能是使用自定义ToString()方法的自定义枚举类(每个参数有一个值)。然后,您可以反向查找字符串以获取枚举值,在切换案例中使用它。如果参数无效,则在反向查找期间可能会抛出异常。