in iothub/device/src/Transport/Http/HttpClientHelper.cs [45:146]
public HttpClientHelper(
Uri baseAddress,
IAuthorizationProvider authenticationHeaderProvider,
IDictionary<HttpStatusCode, Func<HttpResponseMessage, Task<Exception>>> defaultErrorMapping,
TimeSpan timeout,
Http1TransportSettings transportSettings,
ProductInfo productInfo,
IWebProxy proxy,
bool isClientPrimaryTransportHandler = false)
{
_baseAddress = baseAddress;
_authenticationHeaderProvider = authenticationHeaderProvider;
_defaultErrorMapping = new ReadOnlyDictionary<HttpStatusCode, Func<HttpResponseMessage, Task<Exception>>>(defaultErrorMapping);
_productInfo = productInfo;
_isClientPrimaryTransportHandler = isClientPrimaryTransportHandler;
if (transportSettings.HttpClient != null)
{
_httpClientObj = transportSettings.HttpClient;
return;
}
HttpMessageHandler httpMessageHandler;
_usingX509ClientCert = transportSettings.ClientCertificate != null;
#if NET451
TlsVersions.Instance.SetLegacyAcceptableVersions();
#pragma warning disable CA2000 // Dispose objects before losing scope
// This disposable handler is disposed when the HttpClient it is given to is disposed
var webRequestHandler = new WebRequestHandler();
#pragma warning restore CA2000 // Dispose objects before losing scope
if (_usingX509ClientCert)
{
webRequestHandler.ClientCertificates.Add(transportSettings.ClientCertificate);
}
if (proxy != DefaultWebProxySettings.Instance)
{
webRequestHandler.UseProxy = proxy != null;
webRequestHandler.Proxy = proxy;
}
httpMessageHandler = webRequestHandler;
#elif NET5_0_OR_GREATER
#pragma warning disable CA2000 // Dispose objects before losing scope
// This disposable handler is disposed when the HttpClient it is given to is disposed
var socketsHandler = new SocketsHttpHandler();
#pragma warning restore CA2000 // Dispose objects before losing scope
socketsHandler.SslOptions.EnabledSslProtocols = TlsVersions.Instance.Preferred;
if (!TlsVersions.Instance.CertificateRevocationCheck)
{
socketsHandler.SslOptions.CertificateRevocationCheckMode = X509RevocationMode.NoCheck;
}
if (_usingX509ClientCert)
{
socketsHandler.SslOptions.ClientCertificates =
new X509CertificateCollection() { transportSettings.ClientCertificate };
}
if (proxy != DefaultWebProxySettings.Instance)
{
socketsHandler.UseProxy = proxy != null;
socketsHandler.Proxy = proxy;
}
httpMessageHandler = socketsHandler;
#else // cases other than Net 5.0+ and net451
#pragma warning disable CA2000 // Dispose objects before losing scope
// This disposable handler is disposed when the HttpClient it is given to is disposed
var httpClientHandler = new HttpClientHandler();
#pragma warning restore CA2000 // Dispose objects before losing scope
httpClientHandler.SslProtocols = TlsVersions.Instance.Preferred;
httpClientHandler.CheckCertificateRevocationList = TlsVersions.Instance.CertificateRevocationCheck;
if (_usingX509ClientCert)
{
httpClientHandler.ClientCertificates.Add(transportSettings.ClientCertificate);
}
if (proxy != DefaultWebProxySettings.Instance)
{
httpClientHandler.UseProxy = proxy != null;
httpClientHandler.Proxy = proxy;
}
httpMessageHandler = httpClientHandler;
#endif
ServicePointHelpers.SetLimits(httpMessageHandler, _baseAddress);
_httpClientObj = new HttpClient(httpMessageHandler, true);
_httpClientObj.BaseAddress = _baseAddress;
_httpClientObj.Timeout = timeout;
_httpClientObj.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue(CommonConstants.MediaTypeForDeviceManagementApis));
_httpClientObj.DefaultRequestHeaders.ExpectContinue = false;
}