在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
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不同,例如,在PHP中,我只能使用
$testExists = isset($_REQUEST['test']); // == True
发布于 2013-02-16 03:50:57
Request.QueryString.GetValues(null)
将获得一个没有值的键列表
Request.QueryString.GetValues(null).Contains("test")
将返回true
发布于 2013-10-10 19:21:19
我写了一个扩展方法来解决这个问题:
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);
}
发布于 2013-02-16 03:46:41
Request.QueryString
是一个NameValueCollection
,但是只有当查询字符串采用通常的[name=value]*
格式时,才会向其中添加项。如果不是,则为空。
如果您的QueryString
的格式是?test=value
,那么Request.QueryString.AllKeys.Contains("test")
将执行您想要的操作。否则,您只能在Request.Url.Query
上执行字符串操作。
https://stackoverflow.com/questions/14902059
复制相似问题