将查询字符串转换为.Net中的键值对

Irw*_*win 18 .net c# asp.net

如果我有这样的字符串:

"Name=Irwin&Home=Caribbean&Preference=Coffee"
Run Code Online (Sandbox Code Playgroud)

C#中有一个方法可以将其转换为类似于Request.QueryString的键值对吗?

Bra*_*don 36

你可以尝试使用HttpUtility.ParseQueryString.

var nvc = HttpUtility.ParseQueryString(yourString);
Run Code Online (Sandbox Code Playgroud)


xan*_*tos 18

现在,对于最长的LINQ表达......

var dict = "Name=Irwin&Home=Caribbean&Preference=Coffee"
    .Split('&')
    .Select(p => p.Split('='))
    .ToDictionary(p => p[0], p => p.Length > 1 ? Uri.UnescapeDataString(p[1]) : null);
Run Code Online (Sandbox Code Playgroud)

但请注意,如果有多个具有相同名称的键,它将抛出.

如果你想保护自己免受这个添加:

    .GroupBy(p => p[0]).Select(p => p.First())
Run Code Online (Sandbox Code Playgroud)

就在.ToDictionary(之后.Select)之前

这将采取key=value多个中的第一个.更改.First().Last()拿最后一个.


Abb*_*bas 6

您还可以使用ToDictionary()方法:

var input = "Name=Irwin&Home=Caribbean&Preference=Coffee";
var items = input.Split(new[] { '&' });
var dict = items.Select(item => item.Split(new[] {'='})).ToDictionary(pair => pair[0], pair => pair[1]);
Run Code Online (Sandbox Code Playgroud)