【问题标题】:Parsing similar named parameters out of a URL从 URL 中解析类似的命名参数
【发布时间】:2013-02-01 22:12:18
【问题描述】:

我正在使用如下所示的 URL:

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

生成索引号,因此每次都有这些'label[x]'值的动态数量。

在 ASP/C#.NET 4.0 中将这些全部解析为名为“Label”的 String[] 的最简单方法是什么?

【问题讨论】:

    标签: c# asp.net .net url parameters


    【解决方案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(@"\[(.*?)\]");
    

    【讨论】:

    • 太棒了!这非常适合我想要它做的事情。是的,我最初只选择 String[] 作为内存类型的示例。我以前从未使用过 NameValueCollections,所以没有想到。谢谢!
    【解决方案2】:

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

    【讨论】:

    • 更多建议让德鲁尝试这个问题。我不认为这个网站是关于用勺子喂人的。详细了解如何帮助有能力的专业人士快速找到答案。
    • @HamishSmith - 这就是我的想法,我的建议被否决了:(
    • @HamishSmith 不是坏事(不给任何-1),但我只是说,为什么不确定,就说“这样做”。这个问题看起来你不确定。
    【解决方案3】:

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

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

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

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

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

    【讨论】:

      【解决方案4】:

      制作一个叫length的参数

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

      那么在对方已经知道长度的情况下就很容易解析了

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

      -或-

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

      【讨论】:

        猜你喜欢
        • 2012-12-28
        • 1970-01-01
        • 2021-11-17
        • 2015-05-09
        • 1970-01-01
        • 2015-10-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多