Парсинг URL и вытаскивание параметров GET запроса через регулярные выражения на языке C#




При разработке консольного приложения, которое должно было обращаться к веб-сервису, нужно было "распарсить" GET-запрос пути к изображению. К сожалению, System.Web.HttpClient для консольных приложений недоступен, потому пришлось искать другое решение.

Сначала хотел написать свой метод, но при поиске подходящего регулярного выражения натолкнулся на очень элегантное решение, которе чуть-чуть под себя переделал. По сути я лишь заменил тип входящего параметра для метода.

    public static class UriExtensions
    {
        private static readonly Regex queryStringRegex;
        static UriExtensions()
        {
            queryStringRegex = new Regex(@"[\?&](?<name>[^&=]+)=(?<value>[^&=]+)");
        }

        public static IEnumerable<KeyValuePair<string, string>> ParseQueryString(this string uri)
        {
            if (uri == null)
                throw new ArgumentException("uri");

            var matches = queryStringRegex.Matches(uri);
            for (int i = 0; i < matches.Count; i++)
            {
                var match = matches[i];
                yield return new KeyValuePair<string, string>(match.Groups["name"].Value, match.Groups["value"].Value);
            }
        }
    }


 

Обращение к классу и применение:

            string qs = "https://www.google.ru/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=regex%20parse%20querystring%20values%20to%20named%20groups%20c%23";

            var ue = qs.ParseQueryString().ToDictionary(kvp => kvp.Key, kvp => kvp.Value);


            //Вывод отдельных записей:
            Console.WriteLine("source: "+ ue["sourceid"]);
            Console.WriteLine("ie: " + ue["ie"]);

            //Вывод всех записей:
            foreach (var ueitem in ue)
            {
                Console.WriteLine(ueitem.Key + " : " + ueitem.Value);
            }

 

 




MarkiMarta.ru. Записки отца-программиста" с 2009 г.
Категория информационной продукции 18+
Яндекс.Метрика
C#. Вывести все свойства и значения переменной класса

В целях дебага и анализа нередко требуется посмотреть, как заполняются свойства переменной класса. Если свойств хотя бы 10, то вручную...

Закрыть