我在。net中有一个字符串,实际上是一个URL。我想要一种简单的方法从特定的参数中获取值。

通常,我只使用Request。Params["theThingIWant"],但是这个字符串不是来自请求。我可以像这样创建一个新的Uri项:

Uri myUri = new Uri(TheStringUrlIWantMyValueFrom);

我可以使用myUri。查询以获取查询字符串…但显然我得找个雷克斯风的方法把它分开。

我是否遗漏了一些明显的东西,或者是否没有内置的方法来创建某种类型的正则表达式,等等?


当前回答

单线LINQ解决方案:

Dictionary<string, string> ParseQueryString(string query)
{
    return query.Replace("?", "").Split('&').ToDictionary(pair => pair.Split('=').First(), pair => pair.Split('=').Last());
}

其他回答

对于任何想要从字符串中循环所有查询字符串的人

        foreach (var item in new Uri(urlString).Query.TrimStart('?').Split('&'))
        {
            var subStrings = item.Split('=');

            var key = subStrings[0];
            var value = subStrings[1];

            // do something with values
        }

您可以只使用Uri来获取查询字符串列表或查找特定参数。

Uri myUri = new Uri("http://www.example.com?param1=good&param2=bad");
var params = myUri.ParseQueryString();
var specific = myUri.ParseQueryString().Get("param1");
var paramByIndex = myUri.ParseQueryString().Get(2);

你可以在这里找到更多:https://learn.microsoft.com/en-us/dotnet/api/system.uri?view=net-5.0

使用. net Reflector查看System.Web.HttpValueCollection的FillFromString方法。这为您提供了ASP。NET被用来填充请求。变量的集合。

获取参数名称的最简单方法:

using System.Linq;
string loc = "https://localhost:5000/path?desiredparam=that_value&anotherParam=whatever";

var c = loc.Split("desiredparam=").Last().Split("&").First();//that_value

如果你想在默认页面上获得你的QueryString。默认页面意味着你当前页面的url。 你可以试试下面的代码:

string paramIl = HttpUtility.ParseQueryString(this.ClientQueryString).Get("city");