当前位置:  开发笔记 > 编程语言 > 正文

你如何测试你的Request.QueryString []变量?

如何解决《你如何测试你的Request.QueryString[]变量?》经验,为你挑选了6个好方法。

我经常使用Request.QueryString[]变量.

在我Page_load经常做的事情:

       int id = -1;

        if (Request.QueryString["id"] != null) {
            try
            {
                id = int.Parse(Request.QueryString["id"]);
            }
            catch
            {
                // deal with it
            }
        }

        DoSomethingSpectacularNow(id);

这一切似乎有点笨拙和垃圾.你怎么处理你Request.QueryString[]的?



1> Bryan Watts..:

下面是一个扩展方法,允许您编写如下代码:

int id = request.QueryString.GetValue("id");
DateTime date = request.QueryString.GetValue("date");

TypeDescriptor用于执行转换.根据您的需要,您可以添加一个重载,该重载采用默认值而不是抛出异常:

public static T GetValue(this NameValueCollection collection, string key)
{
    if(collection == null)
    {
        throw new ArgumentNullException("collection");
    }

    var value = collection[key];

    if(value == null)
    {
        throw new ArgumentOutOfRangeException("key");
    }

    var converter = TypeDescriptor.GetConverter(typeof(T));

    if(!converter.CanConvertFrom(typeof(string)))
    {
        throw new ArgumentException(String.Format("Cannot convert '{0}' to {1}", value, typeof(T)));
    }

    return (T) converter.ConvertFrom(value);
}



2> VVS..:

使用int.TryParse来取消try-catch块:

if (!int.TryParse(Request.QueryString["id"], out id))
{
  // error case
}



3> 小智..:

试试这个家伙......

List keys = new List(Request.QueryString.AllKeys);

然后你就可以通过...搜索这个家伙了.

keys.Contains("someKey")



4> M4N..:

我正在使用一个小帮手方法:

public static int QueryString(string paramName, int defaultValue)
{
    int value;
    if (!int.TryParse(Request.QueryString[paramName], out value))
        return defaultValue;
    return value;
}

此方法允许我以下列方式从查询字符串中读取值:

int id = QueryString("id", 0);



5> Jon Skeet..:

好吧,有一件事使用int.TryParse而不是......

int id;
if (!int.TryParse(Request.QueryString["id"], out id))
{
    id = -1;
}

这假设"不存在"应该与"非整数"当然具有相同的结果.

编辑:在其他情况下,当你打算将请求参数用作字符串时,我认为验证它们是否存在肯定是一个好主意.



6> terjetyl..:

您也可以使用下面的扩展方法,并执行此操作

int? id = Request["id"].ToInt();
if(id.HasValue)
{

}

//扩展方法

public static int? ToInt(this string input) 
{
    int val;
    if (int.TryParse(input, out val))
        return val;
    return null;
}

public static DateTime? ToDate(this string input)
{
    DateTime val;
    if (DateTime.TryParse(input, out val))
        return val;
    return null;
}

public static decimal? ToDecimal(this string input)
{
    decimal val;
    if (decimal.TryParse(input, out val))
        return val;
    return null;
}

推荐阅读
pan2502851807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有