从Uri获取单个查询参数

我有一个uristring,如: http : //example.com/file? a=1&b=2&c=string% 20param

是否有一个现有的function,将查询参数string转换成一个字典相同的方式ASP.NET的Context.Request做到这一点。

我正在编写一个控制台应用程序,而不是一个Web服务,所以没有Context.Request来parsing我的url。

我知道这很容易破解查询string,但我宁愿使用FCL函数是否存在。

用这个:

string uri = ...; string queryString = new System.Uri(uri).Query; var queryDictionary = System.Web.HttpUtility.ParseQueryString(queryString); 

Tejs的这个代码并不是从URI获取查询string的“正确”方法:

 string.Join(string.Empty, uri.Split('?').Skip(1)); 

您可以使用:

 var queryString = url.Substring(url.IndexOf('?')).Split('#')[0] System.Web.HttpUtility.ParseQueryString(queryString) 

MSDN

这应该工作:

 string url = "http://example.com/file?a=1&b=2&c=string%20param"; string querystring = url.Substring(url.IndexOf('?')); System.Collections.Specialized.NameValueCollection parameters = System.Web.HttpUtility.ParseQueryString(querystring); 

根据MSDN 。 不是你正在寻找的确切的收集types,但仍然有用。

编辑:显然,如果您提供完整的urlParseQueryString它将添加“ http://example.com/file?a ”作为集合的第一个关键。 由于这可能不是你想要的,所以我添加了子string来获取url的相关部分。

看看HttpUtility.ParseQueryString()它会给你一个NameValueCollection而不是一个字典,但仍应该做你所需要的。

另一个选项是使用string.Split()

  string url = @"http://example.com/file?a=1&b=2&c=string%20param"; string[] parts = url.Split(new char[] {'?','&'}); ///parts[0] now contains http://example.com/file ///parts[1] = "a=1" ///parts[2] = "b=2" ///parts[3] = "c=string%20param" 

我不得不这样做一个现代的Windows应用程序。 我使用了以下内容:

 public static class UriExtensions { private static readonly Regex _regex = new Regex(@"[?|&]([\w\.]+)=([^?|^&]+)"); public static IReadOnlyDictionary<string, string> ParseQueryString(this Uri uri) { var match = _regex.Match(uri.PathAndQuery); var paramaters = new Dictionary<string, string>(); while (match.Success) { paramaters.Add(match.Groups[1].Value, match.Groups[2].Value); match = match.NextMatch(); } return paramaters; } } 

编辑:这是根据MaYaN的build议更新

对于孤立的项目,依赖关系必须保持在最低限度,我发现自己使用这个实现:

 var arguments = uri.Query .Substring(1) // Remove '?' .Split('&') .Select(q => q.Split('=')) .ToDictionary(q => q.FirstOrDefault(), q => q.Skip(1).FirstOrDefault()); 

值得注意的是,我不处理任何types的编码string,因为我在受控环境中使用这种编码string,其中编码问题将是服务器端应该解决的编码错误。

在一行代码中:

 string xyz = Uri.UnescapeDataString(HttpUtility.ParseQueryString(Request.QueryString.ToString()).Get("XYZ")); 

下面是你参考使用HttpUtility类parsing查询string值的链接: http ://dnohr.dk/aspnet/how-to-get-url-querystring-variables-from-a-string-url-with-csharp

Microsoft Azure提供了一个可以轻松执行此操作的框架。 http://azure.github.io/azure-mobile-services/iOS/v2/Classes/MSTable.html#//api/name/readWithQueryString:completion

您可以在控制台应用程序中引用System.Web,然后查找拆分URL参数的Utility函数。