web-dev-qa-db-ja.com

HttpClient-Getリクエストにパラメータを追加する

HttpClientGetリクエストに変換しようとしているRestRequestがあります。以下の方法でパラメータを送信する方法はありますか?

private readonly IRestClient _restClient;
public Type GetInfo(string name)
{
    var request = new RestRequest(url, Method.GET);
    request.AddParameter("name", "ivar");
    var response = _restClient.ExecuteRequest(request);
    return ExecuteRequest<Type>(request);
}
6
legend

正しく思い出せば、RestSharpのAddParameterメソッドはリクエストヘッダーを追加せず、GETのUri引数またはPOSTのリクエストボディパラメーターを追加します。

HttpClientに類似したメソッドはないため、GETリクエストのURIを自分でフォーマットする必要があります。

これは、文字列とオブジェクトのペアの辞書を取得し、URIクエリ文字列をフォーマットする便利な方法です。

public static string AsQueryString(this IEnumerable<KeyValuePair<string, object>> parameters)
{
    if (!parameters.Any())
        return "";

    var builder = new StringBuilder("?");

    var separator = "";
    foreach (var kvp in parameters.Where(kvp => kvp.Value != null))
    {
        builder.AppendFormat("{0}{1}={2}", separator, WebUtility.UrlEncode(kvp.Key), WebUtility.UrlEncode(kvp.Value.ToString()));

        separator = "&";
    }

    return builder.ToString();
}
12
dkackman

Request.AddParameter(name, value)を呼び出している行で、代わりにRequest.AddQueryParameter(name, value)に変更します。 GETの場合、これは推奨されるアプローチであり、指定したパラメーターをクエリ文字列に入れます。

0
Mike K