HttpClientを使用してHttps呼び出しを行う 質問する

HttpClientを使用してHttps呼び出しを行う 質問する

私は 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);

おすすめ記事