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
分享
點收藏