ヘッダー
C# サンプル集
 

REST WebAPIを呼び出す

2021/1/10

→ Visual Basic のサンプルに切り替える

 

 

GET のWebAPIを呼び出す

string url = "https://umayadia-apisample.azurewebsites.net/api/persons/Shakespeare";

using (System.Net.Http.HttpClient client = new System.Net.Http.HttpClient())
{
    using (System.Net.Http.HttpResponseMessage response = client.GetAsync(url).Result)
    {
        string responseBody = response.Content.ReadAsStringAsync().Result;
        System.Diagnostics.Debug.WriteLine(responseBody);
    }
}

Debug.WriteLineで出力される場所

メモ:この例では人物情報のWebAPIを呼び出して Shakespeare(シェークスピア)の情報を取得します。 → 人物情報のWebAPIについてはこちら

実行するとこのように出力されます。


{"success":true,"data":{"name":"Shakespeare","note":"Hamlet","age":13,"registerDate":"1564-04-26T20:21:00"}}
 

 

 

GET のWebAPIを呼び出してJSONの戻り値を解析する

この例では、WebAPIを呼び出して、レスポンスとして取得した戻り値のJSONを解析して、そこに含まれる name・note・age・registerDateの各値を抜き出します。

この例を実行するには、NuGet で NewtonSoft.JSON をインストールする必要があります。 → その方法

string url = "https://umayadia-apisample.azurewebsites.net/api/persons/Shakespeare";

using (System.Net.Http.HttpClient client = new System.Net.Http.HttpClient())
{
    using (System.Net.Http.HttpResponseMessage response = client.GetAsync(url).Result)
    {
        //生のレスポンス全体を文字列で取得
        string responseBody = response.Content.ReadAsStringAsync().Result;

        //レスポンスの文字列をJSONとして解析されたJObjectとして取得。
        dynamic oResponse = Newtonsoft.Json.JsonConvert.DeserializeObject(responseBody);

        //レスポンスに含まれる各値を取得。
        bool success = oResponse.success;
        string dataName = oResponse.data.name;
        string dataNote = oResponse.data.note;
        int dataAge = oResponse.data.age;
        DateTime dataRegisterDate = oResponse.data.registerDate;

        //各値を出力
        System.Diagnostics.Debug.WriteLine($"呼び出し成功 = {success}");
        System.Diagnostics.Debug.WriteLine($"名前 = {dataName}");
        System.Diagnostics.Debug.WriteLine($"備考 = {dataNote}");
        System.Diagnostics.Debug.WriteLine($"年齢 = {dataAge}");
        System.Diagnostics.Debug.WriteLine($"登録日時 = {dataRegisterDate}");
    }
}

Debug.WriteLineで出力される場所

メモ:この例では人物情報のWebAPIを呼び出して Shakespeare(シェークスピア)の情報を取得します。 → 人物情報のWebAPIについてはこちら

 

 

POST のWebAPIを本文を設定して呼び出す

string url = "https://umayadia-apisample.azurewebsites.net/api/persons";

using (System.Net.Http.HttpClient client = new System.Net.Http.HttpClient())
{
    string jsonText = "{\"name\":\"卑弥呼\",\"note\":\"邪馬台国\",\"age\":75,\"registerDate\":\"0204-01-01T02:03:04\"}";
    var requestContent = new System.Net.Http.StringContent(jsonText, System.Text.Encoding.UTF8, "application/json");

    using (System.Net.Http.HttpResponseMessage response = client.PostAsync(url, requestContent).Result)
    {
        string responseBody = response.Content.ReadAsStringAsync().Result;
        System.Diagnostics.Debug.WriteLine(responseBody);
    }
}

Debug.WriteLineで出力される場所

メモ:この例では人物情報のWebAPIを呼び出して 卑弥呼(ひみこ) を登録します。人物情報のWebAPIでは、POSTの本文にJSON形式で人物情報を設定することで新しい人物を登録できます。 → 人物情報のWebAPIについてはこちら

メモ:人物情報のWebAPIではブラウザーに下記URLを入力すると、登録されている全人物が表示されます。これを使って正しく登録されているか確認できます。

https://umayadia-apisample.azurewebsites.net/api/persons

メモ:人物情報のWebAPIでは、レスポンスの success が false の場合処理に失敗しています。この場合、レスポンスの errorMessage で失敗した原因がわかることがあります。このサンプルでは Debug.WriteLine でレスポンスを出力しています。

下記は、人物情報のWebAPIでのエラーレスポンスの例です。


{"success":false,"errorCode":"AE101","errorMessage":"nameの文字数が多すぎます。20文字以内にしてください。"}
 

 

 

PUT のWebAPIを本文を設定して呼び出す

string url = "https://umayadia-apisample.azurewebsites.net/api/persons/平賀源内";

using (System.Net.Http.HttpClient client = new System.Net.Http.HttpClient())
{
    string jsonText = "{\"name\":\"平賀源内\",\"note\":\"エレキテル\",\"age\":26,\"registerDate\":\"1728-01-01T00:00:00\"}";
    var requestContent = new System.Net.Http.StringContent(jsonText, System.Text.Encoding.UTF8, "application/json");

    using (System.Net.Http.HttpResponseMessage response = client.PutAsync(url, requestContent).Result)
    {
        string responseBody = response.Content.ReadAsStringAsync().Result;
        System.Diagnostics.Debug.WriteLine(responseBody);
    }
}

Debug.WriteLineで出力される場所

メモ:この例では人物情報のWebAPIを呼び出して 平賀源内 の情報を更新します。デフォルトでは年齢が24歳なのを26歳にします。人物情報のWebAPIでは、PUTの本文にJSON形式で人物情報を設定することで、URLで指定した人物の情報を更新できます。→ 人物情報のWebAPIについてはこちら

メモ:誰かが平賀源内を削除していた場合、この処理は失敗します。

メモ:人物情報のWebAPIではブラウザーに下記URLを入力すると、登録されている全人物が表示されます。これを使って正しく登録されているか確認できます。

https://umayadia-apisample.azurewebsites.net/api/persons

メモ:人物情報のWebAPIでは、レスポンスの success が false の場合処理に失敗しています。この場合、レスポンスの errorMessage で失敗した原因がわかることがあります。このサンプルでは Debug.WriteLine でレスポンスを出力しています。

下記は、人物情報のWebAPIでのエラーレスポンスの例です。


{"success":false,"errorCode":"AE101","errorMessage":"nameの文字数が多すぎます。20文字以内にしてください。"}
 

 

 

DELETE のWebAPIを呼び出す

string url = "https://umayadia-apisample.azurewebsites.net/api/persons/彦坐王";

using (System.Net.Http.HttpClient client = new System.Net.Http.HttpClient())
{
    using (System.Net.Http.HttpResponseMessage response = client.DeleteAsync(url).Result)
    {
        string responseBody = response.Content.ReadAsStringAsync().Result;
        System.Diagnostics.Debug.WriteLine(responseBody);
    }
}

Debug.WriteLineで出力される場所

メモ:この例では人物情報のWebAPIを呼び出して 彦坐王(ひこいますのおう。実在すれば2世紀か3世紀頃の人物)を削除します。→ 人物情報のWebAPIについてはこちら

メモ:彦坐王が登録されていない場合、次のエラーレスポンスを出力します。


{"success":false,"errorCode":"DE101","errorMessage":"彦坐王は存在しないため削除できません。"}
 

 

 

OPTIONS のWebAPIを呼び出す

string url = "https://umayadia-apisample.azurewebsites.net/api/persons";

using (System.Net.Http.HttpClient client = new System.Net.Http.HttpClient())
{
    var request = new System.Net.Http.HttpRequestMessage(System.Net.Http.HttpMethod.Options, url);

    using (System.Net.Http.HttpResponseMessage response = client.SendAsync(request).Result)
    {
        string responseBody = response.Content.ReadAsStringAsync().Result;
        System.Diagnostics.Debug.WriteLine(responseBody);
    }
}

Debug.WriteLineで出力される場所

メモ:この例では人物情報のWebAPIを呼び出して persons リソースに対して有効なメソッドの一覧を取得します。→ 人物情報のWebAPIについてはこちら

実行するとこのように出力されます。

{"success":true,"data":["GET api/<PersonsController> :すべての人物の一覧を取得します。","GET api/<PersonsController>/{name} :{name}で指定された人物を取得します。","POST api/<PersonsController> :人物を追加します。ボディにJSON形式で人物を指定します。","PUT api/<PersonsController>/{name} :{name}で指定された人物を変更します。ボディにJSON形式で変更後の人物の値を指定します。","DELETE api/<PersonsController>/{name} :{name}で指定された人物を削除します。","DELETE api/<PersonsController>/all/reset :すべての人物を初期状態に戻します。すべての変更は失われます。","OPTIONS api/<PersonsController> :personsに対して有効なメソッドの一覧を取得します。"]}

 

 

認証が必要なプロキシーを経由して WebAPIを呼び出す

認証が必要なプロキシーを使用している環境では、次のようにプロキシーの情報を設定します。

※私はプロキシー環境下でこのプログラムの動作を確認していないので、何かうまく動かない可能性もあります。多分動くと思いますが・・・。

string url = "https://umayadia-apisample.azurewebsites.net/api/persons/Shakespeare";

var handler = new System.Net.Http.HttpClientHandler();
handler.Proxy = System.Net.WebRequest.GetSystemWebProxy(); //Windowsで設定されているプロキシー情報からプロキシーを取得します。
//handler.Proxy = new System.Net.WebProxy("http://proxy.mycompany.net", 8080); //←必要ならプロキシーのアドレスを指定することもできます。
handler.Proxy.Credentials = new System.Net.NetworkCredential("username", "password");
//handler.Proxy.Credentials = new System.Net.NetworkCredential("username", "password","company"); //←必要ならドメイン名も指定します。この場合、company\username として表記に見慣れているかもしれません。
handler.UseProxy = true;

using (System.Net.Http.HttpClient client = new System.Net.Http.HttpClient(handler))
{
    using (System.Net.Http.HttpResponseMessage response = client.GetAsync(url).Result)
    {
        string responseBody = response.Content.ReadAsStringAsync().Result;
        System.Diagnostics.Debug.WriteLine(responseBody);
    }
}

Debug.WriteLineで出力される場所

メモ:この例では人物情報のWebAPIを呼び出して Shakespeare(シェークスピア)の情報を取得します。 → 人物情報のWebAPIについてはこちら

実行するとこのように出力されます。


{"success":true,"data":{"name":"Shakespeare","note":"Hamlet","age":13,"registerDate":"1564-04-26T20:21:00"}}
 

 

 

参考:HTTPS(SSL)のバージョンを指定する。たとえば、TLS 1.2 や TLS 1.3

SSLのバージョンを指定するには System.Net.ServicePointManager.SecurityProtocol を使用します。そのほかの部分は変更する必要はありません。

//TLS1.2またはTLS1.3を使用するように指定する。
System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12 | System.Net.SecurityProtocolType.Tls13;

string
url = "https://umayadia-apisample.azurewebsites.net/api/persons/Shakespeare";

using (System.Net.Http.HttpClient client = new System.Net.Http.HttpClient())
{
    using (System.Net.Http.HttpResponseMessage response = client.GetAsync(url).Result)
    {
        string responseBody = response.Content.ReadAsStringAsync().Result;
        System.Diagnostics.Debug.WriteLine(responseBody);
    }
}

Debug.WriteLineで出力される場所

参考

.NET Framework でのトランスポート層セキュリティ (TLS) のベスト プラクティス | Microsoft Docs