HTTP-клиент для C# (.NET): топ библиотек для работы с веб-запросами

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

HTTP-клиент для C# (.NET): обзор лучших библиотек

При разработке современных приложений на C# (.NET) практически всегда возникает необходимость взаимодействия с удалёнными веб-сервисами и API. Базовый класс HttpClient предоставляет все необходимые возможности, но для сложных сценариев (повторные попытки, сериализация, удобный fluent-интерфейс) сообщество создало несколько мощных библиотек-обёрток. В этой статье мы рассмотрим четыре наиболее популярных HTTP-клиента для C# (.NET), сравним их возможности и приведём примеры кода.

1. HttpClient (встроенный в .NET)

HttpClient — это стандартный класс из пространства имён System.Net.Http, доступный во всех версиях .NET (включая .NET Core, .NET 5/6/7/8). Он является фундаментом, на котором построены все остальные библиотеки.

Преимущества:

  • Не требует установки дополнительных пакетов (входит в BCL).
  • Полный контроль над процессом отправки запросов.
  • Поддержка HTTP/1.1, HTTP/2, HTTP/3.
  • Встроенная поддержка gzip/deflate сжатия.
  • Возможность работы с потоками (streaming).

Недостатки:

  • Требует ручного управления повторными попытками (retry).
  • Нет встроенной сериализации/десериализации JSON.
  • Многословный код для типовых операций.

Пример использования:

using System.Net.Http;
using System.Text.Json;
using System.Threading.Tasks;

public class UserClient
{
    private readonly HttpClient _httpClient;

    public UserClient()
    {
        _httpClient = new HttpClient();
        _httpClient.BaseAddress = new Uri("https://jsonplaceholder.typicode.com");
    }

    public async Task<User> GetUserAsync(int id)
    {
        var response = await _httpClient.GetAsync($"/users/{id}");
        response.EnsureSuccessStatusCode();
        var json = await response.Content.ReadAsStringAsync();
        return JsonSerializer.Deserialize<User>(json);
    }

    public async Task<User> CreateUserAsync(User user)
    {
        var json = JsonSerializer.Serialize(user);
        var content = new StringContent(json, System.Text.Encoding.UTF8, "application/json");
        var response = await _httpClient.PostAsync("/users", content);
        response.EnsureSuccessStatusCode();
        var responseJson = await response.Content.ReadAsStringAsync();
        return JsonSerializer.Deserialize<User>(responseJson);
    }
}

public class User
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Email { get; set; }
}

2. RestSharp

RestSharp — одна из старейших и наиболее популярных библиотек для работы с REST API. Она предоставляет удобный fluent-интерфейс, автоматическую сериализацию/десериализацию JSON и XML, а также встроенную обработку ошибок.

Преимущества:

  • Простой и интуитивно понятный API.
  • Автоматическая сериализация/десериализация.
  • Встроенная поддержка аутентификации (Basic, OAuth, JWT).
  • Поддержка файловых загрузок (multipart/form-data).
  • Гибкая система обработки ошибок и повторных попыток.

Недостатки:

  • Зависимость от внешнего пакета (NuGet: RestSharp).
  • Для некоторых сценариев излишне абстрагирует HTTP.

Пример использования:

using RestSharp;
using System.Threading.Tasks;

public class UserClient
{
    private readonly RestClient _client;

    public UserClient()
    {
        _client = new RestClient("https://jsonplaceholder.typicode.com");
    }

    public async Task<User> GetUserAsync(int id)
    {
        var request = new RestRequest($"/users/{id}", Method.Get);
        var response = await _client.ExecuteAsync<User>(request);
        return response.Data;
    }

    public async Task<User> CreateUserAsync(User user)
    {
        var request = new RestRequest("/users", Method.Post);
        request.AddJsonBody(user);
        var response = await _client.ExecuteAsync<User>(request);
        return response.Data;
    }
}

3. Flurl

Flurl — это современная библиотека, которая делает HTTP-запросы максимально лаконичными и выразительными. Она сочетает в себе fluent-синтаксис и мощные возможности, такие как тестирование (через mocks) и поддержка различных форматов данных.

Преимущества:

  • Очень короткий и читаемый код (цепочки методов).
  • Встроенная поддержка сериализации JSON/XML.
  • Удобное построение URL с помощью AppendPathSegment

Рекомендаций