以下のコードを使用して、POSTリクエストをサーバーに送信します。
string url = "http://myserver/method?param1=1¶m2=2"
HttpClientHandler handler = new HttpClientHandler();
HttpClient httpClient = new HttpClient(handler);
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, url);
HttpResponseMessage response = await httpClient.SendAsync(request);
デバッグするサーバーにアクセスできませんが、知りたいのですが、このリクエストはPOSTまたはGET?
GETの場合、param1とparam2をPOSTデータ(URLにない))として送信するようにコードを変更するにはどうすればよいですか?
よりクリーンな代替策は、Dictionary
を使用してパラメーターを処理することです。結局、これらはキーと値のペアです。
_private static readonly HttpClient HttpClient;
static MyClassName()
{
// HttpClient is intended to be instantiated once and re-used throughout the life of an application.
// Instantiating an HttpClient class for every request will exhaust the number of sockets available under heavy loads.
// This will result in SocketException errors.
// https://docs.Microsoft.com/en-us/dotnet/api/system.net.http.httpclient?view=netframework-4.7.1
HttpClient = new HttpClient();
}
var url = "http://myserver/method";
var parameters = new Dictionary<string, string> { { "param1", "1" }, { "param2", "2" } };
var encodedContent = new FormUrlEncodedContent (parameters);
var response = await HttpClient.PostAsync (url, encodedContent).ConfigureAwait (false);
if (response.StatusCode == HttpStatusCode.OK) {
// Do something with response. Example get content:
// var responseContent = await response.Content.ReadAsStringAsync ().ConfigureAwait (false);
}
_
また、キーワードusing
を使用しない場合は、Dispose()
HttpClientを忘れないでください
Microsoft docs のHttpClientクラスの備考セクションで述べたように、HttpClientは一度インスタンス化して再利用する必要があります。
編集:
response.EnsureSuccessStatusCode();
の代わりに if (response.StatusCode == HttpStatusCode.OK)
を調べることもできます。
HttpClientを保持し、Dispose()
してはいけません。参照: HttpClientとHttpClientHandlerは破棄する必要がありますか?