TGViewer
.NET Разработчик .NET Разработчик @netdeveloperdiary · 6.78K subscribers
Post #967 1.25K
День семьсот восемьдесят пятый.
Элегантный Способ Создания URL с Помощью Flurl
Распространенной задачей при вызове веб-API или ресурсов из кода является создание URL-адреса и добавление необходимых параметров строки запроса. Обычно мы пишем что-то вроде этого:
var userId = 1;
var completed = true;
var someParamValue = "abc";

Uri baseAddress = new Uri("https://example.com/");
Uri apiUrl = new Uri(
$"/todos?userId={userId}&completed={completed}" +
$"&someParamValue={someParamValue}",
UriKind.Relative);

Типичная проблема с этим кодом заключается в том, что вы можете случайно пропустить ?, & или =. Кроме этого, страдает читабельность кода, особенно если параметров много.

Flurl - это современный, асинхронный, тестируемый, fluent-подобный конструктор URL-адресов для .NET. Он добавляет методы расширения к строкам, и помогает легко и элегантно добавлять сегменты пути, параметры запроса и т.д. Исходный код выше можно переписать с помощью Flurl так:
using Flurl;
string url = "https://example.com/"
.AppendPathSegment("todos")
.SetQueryParam("userId", userId)
.SetQueryParam("completed", completed)
.SetQueryParam("someParam", someParamValue);

Помимо метода SetQueryParam, существует и SetQueryParams, который принимает объект, любую коллекцию пар ключ-значение, кортеж или словарь. Методы расширения Flurl доступны как для String, так и для System.Uri. В любом случае результат легко конвертировать туда и обратно с помощью методов ToString() и ToUri():
using Flurl;
Uri url = "https://example.com/"
.AppendPathSegment("todos")
.SetQueryParams(new {
userId = userId,
completed = completed,
someParam = someParamValue
})
.ToUri();

Помимо этого, Flurl предоставляет множество других полезных инструментов, вроде расширенного парсинга Url, различных вариантов кодирования добавляемых параметров и т.п. Загляните в документацию Flurl, чтобы узнать больше.

Источник: https://kumarashwinhubert.com/flurl-the-elegant-way-to-build-urls-and-set-query-params-in-net
More from @netdeveloperdiary
  1. Oct 17, 2026День 2817. #ЧтоНовенького #VS Прекращаем Сборку После Первой Ошибки Мэдс Кристенсен продол…
  2. Oct 16, 2026День 2816. #Карьера #AI Станет ли ИИ-Кодинг Концом Программирования для Людей? Автор ориги…
  3. Oct 15, 2026Post #3374
  4. Oct 14, 2026Post #3373
  5. Oct 13, 2026День 2813. #ЗаметкиНаПолях #Async Ещё Раз Про Async/Await в C#. Часть 1 Почему существует…
  6. Oct 12, 2026День 2812. #Карьера #AI Как Разработчикам Оставаться Полезными, Когда Код Пишет ИИ? По мер…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →