从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函数。