【问题标题】:How to retrieve multiple values for a querystring parameter in asp.net如何在 asp.net 中检索查询字符串参数的多个值
【发布时间】:2015-10-28 04:05:33
【问题描述】:

假设使用参数的多个值调用页面,例如:

http://example.com/mypage.aspx?x=1&x=2

我发现 request.QueryString("x") = "1,2".

好的,没关系,我想我可以对其进行 string.split 以获取各个值。

但是如果查询是

http://example.com/mypage.aspx?x=1,2&x=3

然后 request.QueryString("x") = "1,2,3".

有没有办法区分多个值和嵌入逗号的值?我若有所思地记得,在 Java 中,您会得到一个数组,其中每个值都有一个单独的条目。

(我试着说“mypage.aspx?x=1%2c&x=3”,但这也给出了“1,2,3”。)

【问题讨论】:

  • string[] array = request.QueryString("x") .Split(new[] { ','}, StringSplitOptions.RemoveEmptyEntries);那么你有 array[0] = 1 , array[1] = 2 等等......
  • @codebased 但是如果我希望逗号成为参数中的合法值怎么办?也就是说,在我上面的例子中,我想要 x[0]="1,2" 和 x[1]="3"?
  • 我刚刚在下面回答了你。

标签: asp.net request.querystring


【解决方案1】:

我认为没有直接的方法,但您可以通过一些解决方法来实现它:mypage.aspx?x=1,2&x=3 with HttpUtility.UrlDecode(Request.QueryString.ToString()) 输出为"x=1,2&x=3"

代码示例:

  if (Request.QueryString != null & Request.QueryString.Count > 0)
  {
       var queryStrings = HttpUtility.UrlDecode(Request.QueryString.ToString
       ());
       var arrQueryStrings = queryStrings.Split('&');
       //var length = arrQueryStrings.Length;
       var part1 = arrQueryStrings[0];//x=1,2
       var part2 = arrQueryStrings[1];//x=3

      //Other option: get it from Request RawUrl and split it
      //var rawUrl = Request.RawUrl;
   }

【讨论】:

  • 好吧,我自己解析一下。我猜大多数时候你不会期望逗号出现在参数中,这可能是“是的,咬紧牙关”。
【解决方案2】:

这可能会对您有所帮助 - 我刚刚创建了一个小型控制台 sn-p 供您复制和粘贴以了解它是如何工作的:

using System;
using System.Collections.Generic;
using System.Linq;

namespace Exercise1
{
    internal class Program
    {
        public static void Main()
        {
            var urlUri = new Uri(new Uri("htt://www.myapp.com/"), "news?x=1,2&x=3&x=4,5&x=");
            var queryData = urlUri.Query.Split(new[] {'&'}, StringSplitOptions.RemoveEmptyEntries);

            var resultValue = new List<string>(queryData.Count());
            resultValue.AddRange(queryData.Select(d => d.Split(new[] {'='}, StringSplitOptions.RemoveEmptyEntries)).Where(result => result != null && result.Count() == 2).Select(result => result[1]));

            foreach (var value in resultValue)
            {
                Console.WriteLine(value);
            }

            Console.ReadLine();

        }
    }

}

基本上我首先用 & 分割。 然后我被 =

分开

因此,您可以准备一个数组以按照您想要的方式进行操作。

这里我使用的是 Uri 对象,在您的情况下,您将按原样从 Request.Url.Query 读取查询字符串

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-05
    • 1970-01-01
    • 1970-01-01
    • 2017-07-14
    • 2014-08-11
    • 2010-11-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多