适用于.NET的现代化HTTP请求客户端FluentHttpClient

FluentHttpClient

FluentHttpClient 是用于 REST API 的现代异步 HTTP 客户端, 多平台支持 Linux、Mac 和 Windows。多框架支持,.NET, .NET Core, .NET Framework, .NET Standard 等。

使用 fluent api,一行代码发送 http 请求,并绑定请求体,请求头,以及解析响应内容,反序列化,可选的重试等等。.

下面是一个示例:

Blog result = await new FluentClient("https://example.org/api")
   .GetAsync("blogs")
   .WithArgument("id", 15)
   .WithBearerAuthentication(token)
   .As<Blog>();
开始使用

从 Nuget 中安装 Pathoschild.Http.FluentClient

基本用法

这是一个简单的 Get 请求,并把响应内容反序列化为 Item 类。

Item item = await new FluentClient()
   .GetAsync("https://example.org/api/items/14")
   .As<Item>();

还可以定义公共的客户端(这可以使用内置连接池提高性能),然后在构造函数中设置 URL:

using var client = new FluentClient("https://example.org/api");

Item item = await client
   .GetAsync("items/14")
   .As<Item>();

客户端库提供了开箱即用的DELETE、GET、POST、PUT和方法。

URL 参数

可以使用匿名对象向请求 URL 添加任意数量的参数:

await client
   .PostAsync("items/14")
   .WithArguments(new { page = 1, search = "some search text" });

或者用字典:

await client
   .PostAsync("items/14")
   .WithArguments(new Dictionary<string, object> { … });

或者单独设置每个参数:

await client
   .PostAsync("items/14")
   .WithArgument("page", 1)
   .WithArgument("search", "some search text");

设置请求体

可以直接在 POST 或 PUT 中添加请求体。

await client.PostAsync("search", new SearchOptions(…));

或者使用下面的方式:

await client
   .GetAsync("search")
   .WithBody(new SearchOptions(…));

设置请求头

await client
   .PostAsync("items/14")
   .WithHeader("User-Agent", "Some Bot/1.0.0")
   .WithHeader("Content-Type", "application/json");

并支持使用 WithAuthentication WithBasicAuthentication WithBearerAuthentication 更方便的添加认证信息。

简单的重试策略

默认情况下,客户端库不会重试失败的请求,如果需要重试的话,也容易配置:

client
   .SetRequestCoordinator(
      maxRetries: 3,
      shouldRetry: request => request.StatusCode != HttpStatusCode.OK,
      getDelay: (attempt, response) => TimeSpan.FromSeconds(attempt * 5)       
   );

FluentHttpClient 使用了 Fluent API, 可以很方便的处理 Http 请求,其他的功能还支持,自定义重试,单元测试等等,感兴趣的同学可以关注下。

项目地址

https://github.com/Pathoschild/FluentHttpClient