小编典典

使用 HttpClient 进行 Https 调用

all

我一直在HttpClient使用 C# 进行 WebApi 调用。与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 是:第一步。

如何提供证书和公钥/私钥以及 C# 请求。


阅读 65

收藏
2022-07-30

共1个答案

小编典典

如果服务器只支持更高的 TLS 版本,比如 TLS 1.2,它仍然会失败,除非你的客户端 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);
2022-07-30