我很好奇每个人都做了些什么来处理/抽象ASP.NET中的QueryString,在我们的一些web应用中,我在整个网站上看到了很多这样的东西:
int val = 0;
if(Request.QueryString["someKey"] != null)
{
val = Convert.ToInt32(Request.QueryString["someKey"]);
}
有什么更好的方法来处理这种粗俗吗?
发布于 2009-03-02 23:39:48
我倾向于将它们抽象为属性的想法。例如:
public int age {
get
{
if (Request.QueryString["Age"] == null)
return 0;
else
return int.Parse(Request.QueryString["Age"]);
}
}
如果你愿意,你可以添加更多的验证。但是我倾向于这样包装我所有的查询字符串变量。
编辑:-也正如另一位发帖者指出的那样,你必须在每个页面上创建这些属性。我的回答是不,你不需要。您可以在称为"QueryStrings“或其他名称的单个类中创建这些属性。然后,您可以在想要访问查询字符串的每个页面中实例化这个类,然后可以简单地执行如下操作
var queryStrings = new QueryStrings();
var age = queryStrings.age;
这样,您就可以将用于访问和处理每种类型的查询变量的所有逻辑封装在一个可维护的位置中。
EDIT2:-因为它是类的一个实例,所以您还可以使用依赖项注入来将QueryStrings类注入到您使用它的任何地方。StructureMap在这方面做得很好。这还允许您模拟QueryStrings类并注入它,如果您想进行自动化单元测试的话。与ASP.NET的Request对象相比,模拟这个对象要容易得多。
发布于 2009-03-02 23:33:42
一件事是你没有在这里捕获空白值。您可能有一个类似于"http://example.com?someKey=&anotherKey=12345“的url,在本例中,"someKey”参数值是"“(空)。您可以使用string.IsNullOrEmpty()检查null和empty状态。
我还将"someKey“更改为存储在一个变量中。这样就不会在多个地方重复文字字符串。这使得它更容易维护。
int val = 0;
string myKey = "someKey";
if (!string.IsNullOrEmpty(Request.QueryString[myKey]))
{
val = int.Parse(Request.QueryString[myKey]);
}
我希望这对你有帮助!
伊恩
发布于 2009-03-03 00:17:59
编写某种帮助器方法(库)来处理它...
public static void GetInt(this NameValueCollection nvCol, string key, out int keyValue, int defaultValue)
{
if (string.IsNullOrEmpty(nvCol[key]) || !int.TryParse(nvCol[key], out keyValue))
keyValue = defaultValue;
}
或者其他类似的东西...
https://stackoverflow.com/questions/604480
复制相似问题