如何解决ASP.Net MVC:获取不带键的查询值
| 我有网址:http://site.com/page.aspx?update 如何检查该更新值是否存在? “ 0”将其视为具有“ 1”键的实体。我试过了:var noKeyValues = Request.QueryString.GetValues(null);
if (noKeyValues != null && noKeyValues.Any(v=>v==update)) ...
但这给我带来皱眉,因为GetValues的参数用[NotNull]装饰。
所以我最终做了:
var queryValuesWithNoKey =
Request.QueryString.AllKeys.Select((key,index) => new { key,value = Request.QueryString.GetValues(index) }).Where(
item => item.key == null).Select(item => item.value).SingleOrDefault();
if (queryValuesWithNoKey != null && queryValuesWithNoKey.Any(v => v.ToLower() == \"update\")) live = true;
不是最优雅的解决方法。是否有更好的方法从查询字符串获取无键值?
解决方法
您可以使用
Request.QueryString[null]
检索逗号分隔的无值列表。例如,如果您的网址是:
http://mysite/?first&second
然后以上将返回
first,second
就您而言,您可以执行以下操作:
if(Request.QueryString[null] == \"update\")
{
// it\'s an update
}
,如果那是您唯一要使用的密钥
Request.QueryString.ToString()以获取\“ update \”值
,我知道我迟到聚会了,但这是我用于此类任务的功能。
internal static bool HasQueryStringKey(HttpRequestBase request,string key)
{
// If there isn\'t a value,ASP will not recognize variable / key names.
string[] qsParts = request.QueryString.ToString().Split(\'&\');
int qsLen = qsParts.Length;
for (int i = 0; i < qsLen; i++)
{
string[] bits = qsParts[i].Split(\'=\');
if (bits[0].Equals(key,StringComparison.OrdinalIgnoreCase))
{
return true;
}
}
return false;
}
您可能需要对其进行更新,使其区分大小写,或者根据您的目的使用不同的参数,但这对我来说一直很好。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。