1. ホーム
  2. c#

[解決済み】System.Net.HttpClientのget用クエリ文字列の構築

2022-04-18 03:28:43

質問

System.Net.HttpClient を使って http get リクエストを送信したい場合、パラメータを追加する api がないようですが、これは正しいですか?

クエリ文字列を作成するために、名前と値のコレクションを作成し、それらをURLエンコードし、最終的にそれらを連結する必要がない、簡単なAPIはないでしょうか? 私はRestSharpのAPI(すなわちAddParameter(...))のようなものを使用することを望んでいた。

どのように解決するのですか?

<ブロッククオート

System.Net.HttpClientを使用してhttp getリクエストを送信する場合。 は、パラメータを追加するためのAPIがないようですが、これは正しいのでしょうか?

はい。

クエリ文字列を作成するための簡単なAPIはありますか? 名前と値のコレクションを作成し、URLエンコードする必要はありません。 を作成し、最終的にそれらを連結するのですか?

もちろんです。

var query = HttpUtility.ParseQueryString(string.Empty);
query["foo"] = "bar<>&-baz";
query["bar"] = "bazinga";
string queryString = query.ToString();

を実行すると、期待通りの結果が得られます。

foo=bar%3c%3e%26-baz&bar=bazinga

また UriBuilder クラスは便利です。

var builder = new UriBuilder("http://example.com");
builder.Port = -1;
var query = HttpUtility.ParseQueryString(builder.Query);
query["foo"] = "bar<>&-baz";
query["bar"] = "bazinga";
builder.Query = query.ToString();
string url = builder.ToString();

を実行すると、期待通りの結果が得られます。

http://example.com/?foo=bar%3c%3e%26-baz&bar=bazinga

を、より安全にあなたの HttpClient.GetAsync メソッドを使用します。