C# (.NET) HTTP客户端:顶级库综述
在开发基于C# (.NET)的现代应用程序时,几乎总是需要与远程Web服务和API进行交互。基础类HttpClient提供了所有必要功能,但对于复杂场景(重试、序列化、便捷的Fluent接口),社区创建了几个强大的封装库。本文将介绍四种最流行的C# (.NET) HTTP客户端,比较它们的功能,并提供代码示例。
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压缩支持。
- 支持流式处理。
缺点:
- 需要手动管理重试。
- 无内置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 RestRequ