转自: Dotnet 工具箱
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 请求,其他的功能还支持,自定义重试,单元测试等等,感兴趣的同学可以关注下。
 
           
             
           
                        
评论区