Этот вопрос уже имеет ответ здесь:
У меня есть строка uri как: http://example.com/file?a=1&b=2&c=string%20param
Есть ли существующая функция, которая преобразовала бы строку параметра запроса в словарь тот же путь как Контекст ASP.NET. Запрос делает это.
Я пишу консольное приложение и не веб-сервис, таким образом, нет никакого Контекста. Запросите проанализировать URL для меня.
Я знаю, что довольно легко взломать строку запроса сам, но я использовал бы функцию FCL, то, если существует.
Посмотрите на 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"
Вы можете использовать:
var queryString = url.Substring(url.IndexOf('?')).Split('#')[0]
System.Web.HttpUtility.ParseQueryString(queryString)
Это должно работать:
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. Это не совсем тот тип коллекции, который вы ищете, но все же полезно.
Edit: По-видимому, если вы передадите полный url в ParseQueryString
, он добавит 'http://example.com/file?a' в качестве первого ключа коллекции. Поскольку это, вероятно, не то, что вам нужно, я добавил подстроку, чтобы получить только соответствующую часть url.
Вы можете ссылаться на System.Web в консольном приложении, а затем искать служебные функции, которые разделяют параметры URL.