我有以下代码来解析URL中的键值对:
public static NameValueCollection ParseQueryString(String query)
{
NameValueCollection queryParameters = new NameValueCollection();
string[] querySegments = query.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);
}
}
return queryParameters;
}
我正在像这样使用此功能:
args = ParseQueryString("alpha=1&beta=bbbb&array%5B0%5D%5Ba%5D=1&array%5B0%5D%5Bb%5D=2&array%5B1%5D%5Ba%5D=1&array%5B1%5D%5Bb%5D=2&array%5B%5D=3&array%5B%5D=4");
foreach (var k in args.AllKeys)
{
tw.WriteLine(k + ": " + args[k]);
}
输出:
alpha: 1
beta: bbbb
array[0][a]: 1
array[0][b]: 2
array[1][a]: 1
array[1][b]: 2
array[]: 3,4
我需要嵌套NameValueCollections或嵌套Dictionary的输出,因此我可以像这样访问值:
args = ParseQueryString("alpha=1&beta=bbbb&array%5B0%5D%5Ba%5D=1&array%5B0%5D%5Bb%5D=2&array%5B1%5D%5Ba%5D=1&array%5B1%5D%5Bb%5D=2&array%5B%5D=3&array%5B%5D=4");
var item = args.Get("array").Get(0).Get("b"); // will be "2"
实现此目的最优雅的方法是什么?我希望没有System.Web或任何其他参考的解决方案。
如果使用ASP.NET MVC框架,则默认的MVC参数绑定器可以通过以下方式自动处理它:
// GetData?filters[0][field]=fieldName&filters[0][type]=number&filters[0][value]=3
public ActionResult GetData(IEnumerable<Dictionary<string,string>> filters)
{
// todo
}
有关更多信息和示例,请查看我撰写的有关此主题的博客文章。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句