Flurl を利用した .NET での効率的な HTTP リクエスト処理

Flurl を利用した .NET での効率的な HTTP リクエスト処理

Flurl は、モダンで、流れるような、非同期対応、テスト可能、ポータブルな URL 拡張と HTTP クライアントコンポーネントです。

最終更新 2022/06/24 21:45
SpringLeee
読了目安 2 分
カテゴリ
.NET
タグ
.NET C# Flurl

はじめに

公式の説明によると、Flurl はモダンで、流暢で、非同期をサポートし、テスト可能で、ポータブルな URL 拡張および HTTP クライアントコンポーネントです。

URL 構築

ここにログイン用のAPIがあります。アドレスは次の通りです:

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 インスタンスを管理しています。通常、1つのホストに対して1つの HttpClient を作成し、キャッシュして再利用します。

Flurl は IOC コンテナも適切にサポートしており、依存性注入でも使用できます。

まとめ

Flurl コンポーネントは HTTP 操作をより簡単で使いやすくします。プロジェクトで試してみてください。その他にもテスト可能性や構成可能性などの機能があり、公式サイトでドキュメントを見つけることができます。

ぜひQRコードをスキャンして、私たちの公式アカウント「半栈程序员」をフォローしてください。海外の優れたブログの翻訳やオープンソースプロジェクトの紹介を専門としています。

さらに探索

関連読書

その他の記事
同じカテゴリ / 同じタグ 2026/04/22

各OSバージョンの.NETサポート状況(250707更新)

仮想マシンとテストマシンを使用して、各OSバージョンの.NETサポート状況を確認します。OSインストール後、対応するランタイムをインストールし、Stardustエージェントを実行できることを確認します(合格条件)。

続きを読む