ASP.NET Core中的ServicePointManager

时间:2016-09-18 16:52:38

标签: asp.net-core .net-core asp.net-core-1.0

我试图将现有的类库代码转换为.NET Core类库。在static构造函数中的代码中,我有以下内容:

ServicePointManager.DefaultConnectionLimit = 100;
ServicePointManager.Expect100Continue = false;

我进行了一些搜索,并且.NET Core中不再提供ServicePointManager,现在应该使用WinHttpHandlerServicePointManager.DefaultConnectionLimit in .net core?)。

我的问题是ServicePointManager究竟是什么以及正在设置的属性是什么?

WinHttpHandler不是static ServicePointManager所以我必须创建一个实例来设置这些属性吗?我是否需要更改所有的http调用才能使用该实例?

3 个答案:

答案 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;

请参阅https://stackoverflow.com/a/44540071/4292717

答案 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;

快乐编码!!!

相关问题