检查Request.QueryString中是否存在未分配的变量

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (76)

在ASP.NET页面的上下文中,我可以使用Request.QueryString在URI的查询字符串部分中获取键/值对的集合。

例如,如果我使用加载我的页面http://local/Default.aspx?test=value,那么我可以调用以下代码:

//http://local/Default.aspx?test=value

protected void Page_Load(object sender, EventArgs e)
{
    string value = Request.QueryString["test"]; // == "value"
}

理想情况下,我想要做的是检查是否存在测试,所以我可以调用该页面http://local/Default.aspx?test并获取布尔值,告诉我测试是否存在于查询字符串中。像这样的东西:

//http://local/Default.aspx?test

protected void Page_Load(object sender, EventArgs e)
{
    bool testExists = Request.QueryString.HasKey("test"); // == True
}

所以理想情况是我想要的是一个布尔值,告诉我测试变量是否存在于字符串中。

我想我可以使用正则表达式来检查字符串,但我很好奇,如果有人有一个更优雅的解决方案。

我试过以下内容:

//http://local/Default.aspx?test

Request.QueryString.AllKeys.Contains("test"); // == False  (Should be true)
Request.QueryString.Keys[0];                  // == null   (Should be "test")
Request.QueryString.GetKey(0);                // == null   (Should be "test")

这种行为与PHP不同,例如,我可以使用它

$testExists = isset($_REQUEST['test']); // == True
提问于
用户回答回答于

Request.QueryString.GetValues(null) 将获得没有值的密钥列表

Request.QueryString.GetValues(null).Contains("test") 将返回true

用户回答回答于

我写了一个扩展方法来解决这个任务:

public static bool ContainsKey(this NameValueCollection collection, string key)
{
    if (collection.AllKeys.Contains(key)) 
        return true;

     // ReSharper disable once AssignNullToNotNullAttribute
    var keysWithoutValues = collection.GetValues(null);
    return keysWithoutValues != null && keysWithoutValues.Contains(key);
}

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励