Xamarin: HTTP POSTリクエスト

概要

XamarinでSystem.Net.Http.HttpClientを使用してHTTPのPOSTリクエストを行う。

docs.microsoft.com

サンプルコード

static readonly HttpClient client = new HttpClient();

private static async Task HttpRequestPostAsync()
{
    Dictionary<string, string> parameters = new Dictionary<string, string>();
    parameters.Add("key1", "value1");
    parameters.Add("key2", "日本語");

    HttpResponseMessage response = await client.PostAsync("http://www.example.com", new FormUrlEncodedContent(parameters)); // A)
    response.EnsureSuccessStatusCode();
    byte[] responseBody = await response.Content.ReadAsByteArrayAsync();
    Console.WriteLine("responseBody=" + Encoding.UTF8.GetString(responseBody));
}

async void OnButtonClicked(System.Object sender, System.EventArgs eventArgs)
{
    try
    {
        await HttpRequestPostAsync();
    }
    catch (Exception e)
    {
        Console.WriteLine($"{e}");
    }
}

A) application/x-www-form-urlencodedでPOSTデータを送信するにはFormUrlEncodedContentクラスを使用する。

実際に送信されるHTTPリクエス

POST / HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: identity
Content-Length: 44
User-Agent: Dalvik/2.1.0 (Linux; U; Android 9; SO-02K Build/47.2.B.5.38)
Host: www.example.com
Connection: keep-alive

key1=value1&key2=%E6%97%A5%E6%9C%AC%E8%AA%9E