J'essaie de convertir un code de bibliothèque de classes existant en une bibliothèque de classes .NET Core. Dans ce code dans un constructeur static
, j'ai ce qui suit:
ServicePointManager.DefaultConnectionLimit = 100;
ServicePointManager.Expect100Continue = false;
J'ai fait quelques recherches et ServicePointManager
n'est plus disponible dans .NET Core, et WinHttpHandler
devrait être utilisé maintenant ( ServicePointManager.DefaultConnectionLimit dans .net core? ).
Ma question est quelle est exactement la ServicePointManager
et quelles sont les propriétés qui sont définies?
WinHttpHandler
n'est pas static
comme ServicePointManager
donc je devrais créer une instance pour définir ces propriétés? dois-je changer tous mes appels http pour utiliser cette instance?
WinHttpHandler
hérite de HttpMessageHandler
, vous pouvez donc le passer comme paramètre lors de la construction de votre HttpClient
comme suit:
WinHttpHandler httpHandler = new WinHttpHandler();
httpHandler.SslProtocols = SslProtocols.Tls12;
HttpClient client = new HttpClient(httpHandler);
J'espère que cela t'aides!
ServicePointManager est disponible dans .NET Core à partir de la version 2.0
Assembly System.Net.ServicePoint, Version = 4.0.0.0, Culture = neutre, PublicKeyToken = cc7b13ffcd2ddd51
Cela dit, j'ai implémenté mes appels client HTTP en utilisant:
System.Net.Http.HttpClientHandler handler; // use DI etc to create
if (options.SkipSsl) // config driven
handler.ServerCertificateCustomValidationCallback = (req, cer, ch, err) => true;
Ajoutez simplement les espaces de noms suivants:
using System.Net.Http;
using System.Net.Http.Headers;
puis changez votre ligne comme ci-dessous,
WinHttpHandler httpHandler = new
WinHttpHandler();
httpHandler.SslProtocols = SslProtocols.Tls12 | SslProtocols.Tls11 | SslProtocols.Tls;
au lieu de
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 |
SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;
Joyeux codage !!!