Другое решение, основанное на ответе dyslexicanaboko , но не зависящее от текущей культуры:
public static string ToTrimmedString(this decimal num)
{
string str = num.ToString();
string decimalSeparator = CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator;
if (str.Contains(decimalSeparator))
{
str = str.TrimEnd('0');
if(str.EndsWith(decimalSeparator))
{
str = str.RemoveFromEnd(1);
}
}
return str;
}
public static string RemoveFromEnd(this string str, int characterCount)
{
return str.Remove(str.Length - characterCount, characterCount);
}
Используйте это:
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));
Посмотрите на 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"
Microsoft Azure предлагает структуру, которая упрощает ее выполнение. http://azure.github.io/azure-mobile-services/iOS/v2/Classes/MSTable.html#//api/name/readWithQueryString:completion :
Вы можете использовать:
var queryString = url.Substring(url.IndexOf('?')).Split('#')[0]
System.Web.HttpUtility.ParseQueryString(queryString)
Split('#')[0]
вернет левую часть реального или мнимого фрагмента i>. Вот спецификация относительно размещения фрагмента i> по запросу i>: RFC 3986
– bvj
12 May 2017 в 03:08
Для изолированных проектов, где зависимости должны быть сведены к минимуму, я обнаружил, что использую эту реализацию:
var arguments = uri.Query
.Substring(1) // Remove '?'
.Split('&')
.Select(q => q.Split('='))
.ToDictionary(q => q.FirstOrDefault(), q => q.Skip(1).FirstOrDefault());
Должен заметить, что я не обрабатываю закодированные строки любого типа, так как я использовал это в контролируемой среде, где проблемы с кодированием были бы ошибкой кодирования на стороне сервера, которая должна быть исправлена.
В одной строке кода:
string xyz = Uri.UnescapeDataString(HttpUtility.ParseQueryString(Request.QueryString.ToString()).Get("XYZ"));
Это должно работать:
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 в своем консольном приложении, а затем искать функции Utility, которые разделяют параметры URL.
Ниже приведена ссылка для ссылки на использование класса HttpUtility для анализа значений запроса: http://dnohr.dk/aspnet/how-to-get-url-querystring-variables-from-a-string- URL-с-CSharp
Я должен был сделать это для современного приложения Windows. Я использовал следующее:
public static class UriExtensions
{
private static readonly Regex _regex = new Regex(@"[?&](\w[\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;
}
}
RegexOptions.Compiled
, согласно этой документации , так как он статичен и предназначен для повторного использования.
– easuter
20 February 2016 в 15:48
@"[?&](\w[\w.]*)=([^?&]+)"
, так как [|?]&
также соответствует |
и [^?|^&]
соответствует любому символу, но ?
/ |
/ ^
и &
.
– Wiktor Stribiżew
13 April 2018 в 08:43
Uri.Query
будет работать только на абсолютном Uri. По относительной она выбрасываетInvalidOperationExeception
. – ghord 23 June 2013 в 12:46