我在。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());
}

其他回答

看起来您应该遍历myUri的值。从那里查询并解析它。

 string desiredValue;
 foreach(string item in myUri.Query.Split('&'))
 {
     string[] parts = item.Replace("?", "").Split('=');
     if(parts[0] == "desiredKey")
     {
         desiredValue = parts[1];
         break;
     }
 }

然而,如果没有在一堆畸形的url上测试它,我不会使用这段代码。它可能会在以下一些/所有地方崩溃:

hello.html吗? hello.html吗?valuelesskey hello.html吗?键=值=你好 hello.html ?嗨=价值吗?与b = c 等

您可以只使用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

使用System.Web.HttpUtility类返回NameValueCollection的静态ParseQueryString方法。

Uri myUri = new Uri("http://www.example.com?param1=good&param2=bad");
string param1 = HttpUtility.ParseQueryString(myUri.Query).Get("param1");

查看文档http://msdn.microsoft.com/en-us/library/ms150046.aspx

HttpContext.Current.Request.QueryString.Get("id");

你也可以使用下面的方法来处理第一个参数:

var param1 =
    HttpUtility.ParseQueryString(url.Substring(
        new []{0, url.IndexOf('?')}.Max()
    )).Get("param1");