0

我正在使用如下所示的 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[] 的最简单方法是什么?

4

4 回答 4

1

您应该使用一个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(@"\[(.*?)\]");
于 2013-02-01T22:19:25.193 回答
0

您是否考虑过枚举 Request.Querystring 集合中的条目?

于 2013-02-01T22:18:28.267 回答
0

您可以从“?”的索引中获取子字符串开始。到最后,然后用'&'分隔。

然后,您可以遍历该列表并按“=”拆分并获取第二个元素,或者从“=”的索引之后开始的每个元素的子字符串。

如果出于某种原因您确实希望它只是字符串数组,那么这一行可能会起作用。

String[] labels = (from substring in s.Substring(s.IndexOf('?') + 1).Split('&') select substring.Substring(substring.IndexOf('=') + 1)).ToArray();

编辑:请注意,这无视实际标签是什么,以及它们的数字;如果除了命名的、编号的label[n]标签之外还有其他东西,它们也会被添加到数组中。

于 2013-02-01T22:29:21.933 回答
-1

制作一个名为length的参数

 some_site.com/full/path/page.aspx?length=4&label[0]=a_value&label[1]=b_value&label[2]=c_value...

那么这将很容易在另一边解析已经知道长度

如果你知道长度,那么你就知道循环遍历多少次来读取查询字符串的值

-或者-

没有可变数量的参数,使用一个,并使用任何特殊字符来分隔它们,然后用另一侧的分隔字符分割值

于 2013-02-01T22:15:07.173 回答