我试图将现有的类库代码转换为.NET Core类库。在static
构造函数中的代码中,我有以下内容:
ServicePointManager.DefaultConnectionLimit = 100;
ServicePointManager.Expect100Continue = false;
我进行了一些搜索,并且.NET Core中不再提供ServicePointManager
,现在应该使用WinHttpHandler
(ServicePointManager.DefaultConnectionLimit in .net core?)。
我的问题是ServicePointManager
究竟是什么以及正在设置的属性是什么?
WinHttpHandler
不是static
ServicePointManager
所以我必须创建一个实例来设置这些属性吗?我是否需要更改所有的http调用才能使用该实例?
答案 0 :(得分:11)
WinHttpHandler
继承自HttpMessageHandler
,因此您可以在构建HttpClient
时将其作为参数传递,如下所示:
WinHttpHandler httpHandler = new WinHttpHandler();
httpHandler.SslProtocols = SslProtocols.Tls12;
HttpClient client = new HttpClient(httpHandler);
希望这有帮助!
答案 1 :(得分:3)
ServicePointManager在.NET Core v2.0中可用
Assembly System.Net.ServicePoint,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = cc7b13ffcd2ddd51
也就是说,我已经使用以下方式实现了我的HTTP客户端调用:
System.Net.Http.HttpClientHandler handler; // use DI etc to create
if (options.SkipSsl) // config driven
handler.ServerCertificateCustomValidationCallback = (req, cer, ch, err) => true;
答案 2 :(得分:0)
只需添加以下名称空间:
using System.Net.Http;
using System.Net.Http.Headers;
然后如下更改您的行,
WinHttpHandler httpHandler = new
WinHttpHandler();
httpHandler.SslProtocols = SslProtocols.Tls12 | SslProtocols.Tls11 | SslProtocols.Tls;
代替
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 |
SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;
快乐编码!!!