如何在 asp.net 中检索查询字符串参数的多个值
How to retrieve multiple values for a querystring parameter in asp.net
假设使用多个参数值调用页面,例如:
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”。)
我认为没有直接的方法,但您可以通过一些解决方法来实现:mypage.aspx?x=1,2&x=3 和 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;
}
这可能对您有所帮助 - 我刚刚创建了一个小的控制台片段供您复制和粘贴以了解它是如何工作的:
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
中读取查询字符串
假设使用多个参数值调用页面,例如:
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”。)
我认为没有直接的方法,但您可以通过一些解决方法来实现:mypage.aspx?x=1,2&x=3 和 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;
}
这可能对您有所帮助 - 我刚刚创建了一个小的控制台片段供您复制和粘贴以了解它是如何工作的:
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
中读取查询字符串