我正在使用如下所示的 URL:
some_site.com/full/path/page.aspx?标签[0] =a_value&标签[1] =b_value&标签[2] =c_value
生成索引号,因此每次都有这些“标签[x]”值的动态数量。
在 ASP/C#.NET 4.0 中将这些全部解析为名为“Label”的 String[] 的最简单方法是什么?
我正在使用如下所示的 URL:
some_site.com/full/path/page.aspx?标签[0] =a_value&标签[1] =b_value&标签[2] =c_value
生成索引号,因此每次都有这些“标签[x]”值的动态数量。
在 ASP/C#.NET 4.0 中将这些全部解析为名为“Label”的 String[] 的最简单方法是什么?
您应该使用一个NameValueCollection
而不是字符串数组。
NameValueCollection queryParameters = new NameValueCollection();
string[] querySegments = queryString.Split('&');
foreach(string segment in querySegments)
{
string[] parts = segment.Split('=');
if (parts.Length > 0)
{
string key = parts[0].Trim(new char[] { '?', ' ' });
string val = parts[1].Trim();
queryParameters.Add(key, val);
}
}
要获取带有方括号的标签编号,请使用Regular Expressions
.
regxObj = new Regex(@"\[(.*?)\]");
您是否考虑过枚举 Request.Querystring 集合中的条目?
您可以从“?”的索引中获取子字符串开始。到最后,然后用'&'分隔。
然后,您可以遍历该列表并按“=”拆分并获取第二个元素,或者从“=”的索引之后开始的每个元素的子字符串。
如果出于某种原因您确实希望它只是字符串数组,那么这一行可能会起作用。
String[] labels = (from substring in s.Substring(s.IndexOf('?') + 1).Split('&') select substring.Substring(substring.IndexOf('=') + 1)).ToArray();
编辑:请注意,这无视实际标签是什么,以及它们的数字;如果除了命名的、编号的label[n]
标签之外还有其他东西,它们也会被添加到数组中。
制作一个名为length的参数
some_site.com/full/path/page.aspx?length=4&label[0]=a_value&label[1]=b_value&label[2]=c_value...
那么这将很容易在另一边解析已经知道长度
如果你知道长度,那么你就知道循环遍历多少次来读取查询字符串的值
-或者-
没有可变数量的参数,使用一个,并使用任何特殊字符来分隔它们,然后用另一侧的分隔字符分割值