首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何测试Request.QueryString[]变量?

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

Stack Overflow用户
提问于 2008-12-08 14:39:08
回答 11查看 110.5K关注 0票数 50

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

在我的Page_load中,我经常做这样的事情:

代码语言:javascript
复制
       int id = -1;

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

        DoSomethingSpectacularNow(id);

这一切看起来都有点笨拙和垃圾。你是如何处理你的Request.QueryString[]的?

EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2008-12-08 15:11:01

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

代码语言:javascript
复制
int id = request.QueryString.GetValue<int>("id");
DateTime date = request.QueryString.GetValue<DateTime>("date");

它使用TypeDescriptor来执行转换。根据您的需要,您可以添加一个接受默认值的重载,而不是抛出异常:

代码语言:javascript
复制
public static T GetValue<T>(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);
}
票数 52
EN

Stack Overflow用户

发布于 2008-12-08 14:42:01

改用int.TryParse来摆脱try-catch块:

代码语言:javascript
复制
if (!int.TryParse(Request.QueryString["id"], out id))
{
  // error case
}
票数 34
EN

Stack Overflow用户

发布于 2010-09-30 03:52:44

试试这家伙..。

代码语言:javascript
复制
List<string> keys = new List<string>(Request.QueryString.AllKeys);

然后你就可以很容易地通过...

代码语言:javascript
复制
keys.Contains("someKey")
票数 19
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/349742

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档