在 .NET 中使用 Flurl 高效處理 HTTP 請求

在 .NET 中使用 Flurl 高效處理 HTTP 請求

Flurl 是一個現代的、流暢的、支援非同步的、可測試的、可移植的、URL 增強和 HTTP 用戶端元件。

最後更新 2022/6/24 下午9:45
SpringLeee
預計閱讀 3 分鐘
分類
.NET
標籤
.NET C# Flurl

簡介

官方介紹,Flurl 是一個現代的、流暢的、支援非同步的、可測試的、可攜帶的,URL 增強和 Http 客戶端元件。

URL 建置

現在有一個登入的介面,網址如下:

https://www.some-api.com/login?name=Lee&pwd=123456

我們在處理這個網址的時候,會拼接 login,然後拼接 ? 號,然後拼接參數,中間還要拼接 & 得到最終的位址。

使用 Flurl 建置,首先需要透過 NuGet 安裝 Flurl 元件。

var url = "http://www.some-api.com"
          .AppendPathSegment("login")
          .SetQueryParams(new
          {
              name = "Lee",
              pwd = "123456"
          });

這很簡單,這是最簡單的 Get 請求,同樣的我們也可以使用 Uri 的擴充方法

var url = new Uri("http://www.some-api.com").AppendPathSegment(...

Http 增強

Flurl 是模組化的,所以還需要安裝 Flurl.Http

using Flurl;
using Flurl.Http;

var result = await "http://www.some-api.com".AppendPathSegment("login").GetAsync();

上面的程式碼會發送一個 GET 請求,並回傳一個 IFlurlResponse,可以得到 StatusCode、Headers 等,也可以透過 GetStringAsync 和 GetJsonAsync 得到回應內容。

如果只是想取得回應內容,我們來看看 Flurl 有多簡單:

T poco = await "http://api.foo.com".GetJsonAsync<T>();
string text = await "http://site.com/readme.txt".GetStringAsync();
byte[] bytes = await "http://site.com/image.jpg".GetBytesAsync();
Stream stream = await "http://site.com/music.mp3".GetStreamAsync();

Post 提交

await "http://api.foo.com".PostJsonAsync(new { a = 1, b = 2 });

動態型別 dynamic

dynamic d = await "http://api.foo.com".GetJsonAsync();

設定請求標頭:

await url.WithHeader("Accept", "text/plain").GetJsonAsync();

await url.WithHeaders(new { Accept = "text/plain", User_Agent = "Flurl" }).GetJsonAsync();

基礎身分驗證

await url.WithBasicAuth("username", "password").GetJsonAsync();

OAuth 2.0

await url.WithOAuthBearerToken("mytoken").GetJsonAsync();

表單提交

await "http://site.com/login".PostUrlEncodedAsync(new {
    user = "user",
    pass = "pass"
});

HttpClient 管理

我們通常不會建立太多的 HttpClient,過多的連線會耗盡伺服器資源,通常會拋出 SocketException 例外,大部分還是使用 HttpClientFactory。

在 Flurl 庫中,它是內部管理 HttpClient 實例,通常一個主機 Host,會建立一個 HttpClient,然後快取來重複使用。

Flurl 也很好的支援了 IOC 容器,你也可以在依賴注入中使用它。

總結

Flurl 元件讓 Http 操作變得更簡單易用,你可以在專案中嘗試使用它,其他的還有一些功能,可測試可設定等,你都可以在官網找到它的文件。

歡迎掃碼關注我們的公眾號 【半棧程式員】,專注國外優秀部落格的翻譯和開源專案分享。

繼續探索

延伸閱讀

更多文章