C# 获取所有查询字符串对并初始化字典的最佳方法
我想在查询字符串中存储所有键/值对:C# 获取所有查询字符串对并初始化字典的最佳方法,c#,asp.net,C#,Asp.net,我想在查询字符串中存储所有键/值对: www.example.com/?a=2&b=3&c=34 查字典。是否有一种快速的方法来完成此操作,而不必手动循环所有项目?获取问号后找到的字符串,在“&”字符上拆分字符串。 然后,对于返回的每个字符串,在“=”字符上再次拆分 您甚至可以为它创建一个扩展方法 public static class StringExtensions { public Dictionary<string, string> Extract
www.example.com/?a=2&b=3&c=34
查字典。是否有一种快速的方法来完成此操作,而不必手动循环所有项目?获取问号后找到的字符串,在“&”字符上拆分字符串。 然后,对于返回的每个字符串,在“=”字符上再次拆分 您甚至可以为它创建一个扩展方法
public static class StringExtensions
{
public Dictionary<string, string> ExtractQueryStringValues( this string target )
{
string queryString = target.Split (target.IndexOf ('?') + 1);
string[] keyvaluePairs = queryString.Split ('&');
Dictionary<string, string> result = new Dictionary<string, string>();
foreach( string pair in keyvaluePairs )
{
var tmp = pair.Split ('=');
result.Add (tmp[0], tmp[1]);
}
return result;
}
}
公共静态类StringExtensions
{
公共字典ExtractQueryStringValues(此字符串目标)
{
字符串queryString=target.Split(target.IndexOf('?')+1);
string[]keyvaluePairs=queryString.Split('&');
字典结果=新字典();
foreach(keyvaluePairs中的字符串对)
{
var tmp=pair.Split('=');
结果.添加(tmp[0],tmp[1]);
}
返回结果;
}
}
差不多吧。
请记住,它并不安全,因为它不能处理每个边缘情况。(例如,给定一个在第一个问号后没有任何内容的字符串,等等),但它应该让您开始使用。尝试
HttpUtility.ParseQueryString()
它将返回键和值的
NameValueCollection
。很好,我不知道HttpUtility。(但我认为这是因为它位于System.Web中,一个我不太熟悉的名称空间)。此外,您还可以使用NameValueCollectionExtensions.CopyTo(这个NameValueCollection,IDictionary)来获取“真正的”IDictionary.Blah。。。注释中的单个“大于”符号无效。对SO的评论需要一些改进。@JohannesH这也有效:var-nv=HttpUtility.ParseQueryString(Request.Url.Query);var qsDic=nv.Cast().ToDictionary(key=>(string)key,key=>nv[(string)key])代码>