Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 获取所有查询字符串对并初始化字典的最佳方法_C#_Asp.net - Fatal编程技术网

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])