"从传输连接中读取数据: 连接已关闭";"由于远程方已关闭传输流,身份验证失败" 问题解决

之前调试好的环境,现在演示出问题了,HTTP访问原代码如下:

复制代码
 1 var request = (HttpWebRequest)WebRequest.Create($"{ConfigurationManager.AppSettings["SRMeetUrl"]}{url}?");
 2             request.Method = "POST";
 3             request.ContentLength = 0;
 4             request.ContentType = "application/x-www-form-urlencoded";
 5             var bytes = Encoding.UTF8.GetBytes(para);
 6             request.ContentLength = bytes.Length;
 7             using (var writeStream = request.GetRequestStream())
 8             {
 9                 writeStream.Write(bytes, 0, bytes.Length);
10             }
11 
12             using (var response = (HttpWebResponse)request.GetResponse())
13             {
14                 var responseValue = string.Empty;
15 
16                 if (response.StatusCode != HttpStatusCode.OK)
17                 {
18                     var message = string.Format("请求数据失败. 返回的 HTTP 状态码:{0}", response.StatusCode);
19                     throw new ApplicationException(message);
20                 }
21 
22                 using (var responseStream = response.GetResponseStream())
23                 {
24                     if (responseStream != null)
25                     {
26                         using (var reader = new StreamReader(responseStream))
27                         {
28                             responseValue = reader.ReadToEnd();
29                         }
30                     }
31                 }
32                 return JsonConvert.DeserializeObject<HttpResultBase<T>>(responseValue);
复制代码

对比发现,配置的服务地址从HTTP变成了HTTPS,需要添加SSL访问处理:

添加如下代码:

1   ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback((sender, certificate, chain, errors) => true);
2   ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11;

HTTPS访问代码如下:

复制代码
 1  ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback((sender, certificate, chain, errors) => true);
 2  ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11;
 3  var request = (HttpWebRequest)WebRequest.Create($"{ConfigurationManager.AppSettings["Url"]}{url}?");
 4  request.Method = "POST";
 5  request.ContentLength = 0;
 6  request.ContentType = "application/x-www-form-urlencoded";
 7  var bytes = Encoding.UTF8.GetBytes(para);
 8  request.ContentLength = bytes.Length;
 9  using (var writeStream = request.GetRequestStream())
10  {
11       writeStream.Write(bytes, 0, bytes.Length);
12  }
13 
14  using (var response = (HttpWebResponse)request.GetResponse())
15  {
16     var responseValue = string.Empty;
17 
18                 if (response.StatusCode != HttpStatusCode.OK)
19                 {
20                     var message = string.Format("请求数据失败. 返回的 HTTP 状态码:{0}", response.StatusCode);
21                     throw new ApplicationException(message);
22                 }
23 
24                 using (var responseStream = response.GetResponseStream())
25                 {
26                     if (responseStream != null)
27                     {
28                         using (var reader = new StreamReader(responseStream))
29                         {
30                             responseValue = reader.ReadToEnd();
31                         }
32                     }
33                 }
34                 return JsonConvert.DeserializeObject<HttpResultBase<T>>(responseValue); ;
35             }
复制代码

 

posted @   治十三  阅读(1521)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗
点击右上角即可分享
微信分享提示