获得单独的查询参数我有一个URI字符串,如:http://example.com/file?a=1&b=2&c=string%20param从乌里
是否有将查询参数字符串转换成字典一样ASP.NET Context.Request做它的现有功能。
我正在编写一个控制台应用程序,而不是一个Web服务,所以没有Context.Request来解析我的URL。
我知道这很容易破解查询字符串自己,但我宁愿使用FCL函数是否存在。
获得单独的查询参数我有一个URI字符串,如:http://example.com/file?a=1&b=2&c=string%20param从乌里
是否有将查询参数字符串转换成字典一样ASP.NET Context.Request做它的现有功能。
我正在编写一个控制台应用程序,而不是一个Web服务,所以没有Context.Request来解析我的URL。
我知道这很容易破解查询字符串自己,但我宁愿使用FCL函数是否存在。
使用此:
string uri = ...;
string queryString = new System.Uri(uri).Query;
var queryDictionary = System.Web.HttpUtility.ParseQueryString(queryString);
此代码由TEJS是不是 '适当' 的方式来获得来自URI查询字符串:
string.Join(string.Empty, uri.Split('?').Skip(1));
请注意'Uri .Query'只能在绝对的Uri上运行。在相对的一个上它会抛出一个'InvalidOperationExeception'。 – ghord 2013-06-23 11:46:58
您可以使用:
var queryString = url.Substring(url.IndexOf('?')).Split('#')[0]
System.Web.HttpUtility.ParseQueryString(queryString)
你可以在控制台应用程序中引用的System.Web,然后寻找一个分裂的URL参数的实用功能。
这应该工作:
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。不是你正在寻找的确切的收集类型,但仍然有用。
编辑:很显然,如果你提供完整的URL来ParseQueryString
它会添加“http://example.com/file?a”为集合的第一个关键。由于这可能不是你想要的,我添加了子字符串来获取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"
+1用于提供其他选项 – 2013-11-04 14:21:36
我不得不这样做为一个现代的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;
}
}
编辑:这是更新按玛雅的建议
下面的链接,供大家参考使用HttpUtility类来解析查询字符串值: http://dnohr.dk/aspnet/how-to-get-url-querystring-variables-from-a-string-url-with-csharp
在单代码行:
string xyz = Uri.UnescapeDataString(HttpUtility.ParseQueryString(Request.QueryString.ToString()).Get("XYZ"));
对于孤立的项目,依赖项必须保持在最低限度,我发现自己使用这个实现心理状态:
var arguments = uri.Query
.Substring(1) // Remove '?'
.Split('&')
.Select(q => q.Split('='))
.ToDictionary(q => q.FirstOrDefault(), q => q.Skip(1).FirstOrDefault());
由于不过请注意,我不处理任何类型的编码字符串,因为我是用这个在受控环境中,编码问题将是对应该固定在服务器端的编码错误。
Microsoft Azure提供了一个可以轻松执行此操作的框架。 http://azure.github.io/azure-mobile-services/iOS/v2/Classes/MSTable.html#//api/name/readWithQueryString:completion:
可能重复[从.NET中的字符串获取URL参数](http://stackoverflow.com/questions/659887/get-url-parameters-from-a-string-in-net) – 2015-02-26 13:32:28