天天看點

适用于 .NET 的 現代化 HTTP 請求用戶端 FluentHttpClient

作者:opendotnet

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

适用于 .NET 的 現代化 HTTP 請求用戶端 FluentHttpClient

分享

适用于 .NET 的 現代化 HTTP 請求用戶端 FluentHttpClient

點收藏

适用于 .NET 的 現代化 HTTP 請求用戶端 FluentHttpClient

繼續閱讀