私は C# を使用して WebApi 呼び出しを行うために を使用していますHttpClient
。 に比べてすっきりしていて高速な方法のようですWebClient
。ただし、呼び出し中に行き詰まってしまいますHttps
。
以下のコードを実行してHttps
電話をかけるにはどうすればよいですか?
HttpClient httpClient = new HttpClient();
httpClient.BaseAddress = new Uri("https://foobar.com/");
httpClient.DefaultRequestHeaders.Accept.Clear();
httpClient.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue("application/xml"));
var task = httpClient.PostAsXmlAsync<DeviceRequest>(
"api/SaveData", request);
編集1:上記のコードは、http 呼び出しを行うには正常に機能します。ただし、スキームを https に変更すると機能しなくなります。次のエラーが発生します。
基礎となる接続が閉じられました: SSL/TLS セキュア チャネルの信頼関係を確立できませんでした。
編集2:スキームを https に変更するのがステップ 1 です。
C# リクエストとともに証明書と公開/秘密キーを提供するにはどうすればよいでしょうか。
ベストアンサー1
サーバーが TLS 1.2 などの上位 TLS バージョンのみをサポートしている場合、クライアント PC がデフォルトで上位 TLS バージョンを使用するように構成されていない限り、失敗します。この問題を解決するには、コードに次のコードを追加します。
System.Net.ServicePointManager.SecurityProtocol |= SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;
コード例を修正すると、
HttpClient httpClient = new HttpClient();
//specify to use TLS 1.2 as default connection
System.Net.ServicePointManager.SecurityProtocol |= SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;
httpClient.BaseAddress = new Uri("https://foobar.com/");
httpClient.DefaultRequestHeaders.Accept.Clear();
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/xml"));
var task = httpClient.PostAsXmlAsync<DeviceRequest>("api/SaveData", request);