@@ -49,10 +49,26 @@ private class ManagedHttpSmartSubtransportStream : SmartSubtransportStream
4949 {
5050 private static int MAX_REDIRECTS = 7 ;
5151
52+ private static readonly HttpClientHandler httpClientHandler ;
53+ private static readonly CredentialCache credentialCache ;
54+
5255 private MemoryStream postBuffer = new MemoryStream ( ) ;
5356 private HttpResponseMessage response ;
5457 private Stream responseStream ;
5558
59+ static ManagedHttpSmartSubtransportStream ( )
60+ {
61+ httpClientHandler = new HttpClientHandler ( ) ;
62+
63+ httpClientHandler . SslProtocols |= SslProtocols . Tls12 ;
64+ //httpClientHandler.ServerCertificateCustomValidationCallback = CertificateValidationProxy;
65+
66+ httpClientHandler . AllowAutoRedirect = false ;
67+
68+ credentialCache = new CredentialCache ( ) ;
69+ httpClientHandler . Credentials = credentialCache ;
70+ }
71+
5672 public ManagedHttpSmartSubtransportStream ( ManagedHttpSmartSubtransport parent , string endpointUrl , bool isPost , string contentType )
5773 : base ( parent )
5874 {
@@ -63,7 +79,7 @@ public ManagedHttpSmartSubtransportStream(ManagedHttpSmartSubtransport parent, s
6379
6480 private HttpClient CreateHttpClient ( HttpMessageHandler handler )
6581 {
66- return new HttpClient ( handler )
82+ return new HttpClient ( handler , false )
6783 {
6884 DefaultRequestHeaders =
6985 {
@@ -73,17 +89,6 @@ private HttpClient CreateHttpClient(HttpMessageHandler handler)
7389 } ;
7490 }
7591
76- private HttpClientHandler CreateClientHandler ( )
77- {
78- var httpClientHandler = new HttpClientHandler ( ) ;
79- httpClientHandler . SslProtocols |= SslProtocols . Tls12 ;
80- httpClientHandler . ServerCertificateCustomValidationCallback = CertificateValidationProxy ;
81-
82- httpClientHandler . AllowAutoRedirect = false ;
83-
84- return httpClientHandler ;
85- }
86-
8792 private Uri EndpointUrl { get ; set ; }
8893
8994 private bool IsPost { get ; set ; }
@@ -157,16 +162,12 @@ private HttpRequestMessage CreateRequest(Uri endpointUrl, bool isPost)
157162
158163 private HttpResponseMessage GetResponseWithRedirects ( )
159164 {
160- ICredentials credentials = null ;
161165 var url = EndpointUrl ;
162166 int retries ;
163167
164168 for ( retries = 0 ; ; retries ++ )
165169 {
166- var httpClientHandler = CreateClientHandler ( ) ;
167- httpClientHandler . Credentials = credentials ;
168-
169- using ( var httpClient = this . CreateHttpClient ( httpClientHandler ) )
170+ using ( var httpClient = CreateHttpClient ( httpClientHandler ) )
170171 {
171172 var request = CreateRequest ( url , IsPost ) ;
172173
@@ -198,14 +199,15 @@ private HttpResponseMessage GetResponseWithRedirects()
198199 throw new InvalidOperationException ( "authentication cancelled" ) ;
199200 }
200201
202+ var scheme = response . Headers . WwwAuthenticate . First ( ) . Scheme ;
203+
201204 if ( cred is DefaultCredentials )
202205 {
203- credentials = CredentialCache . DefaultNetworkCredentials ;
206+ credentialCache . Add ( url , scheme , CredentialCache . DefaultNetworkCredentials ) ;
204207 }
205- else if ( cred is UsernamePasswordCredentials )
208+ else if ( cred is UsernamePasswordCredentials userpass )
206209 {
207- UsernamePasswordCredentials userpass = ( UsernamePasswordCredentials ) cred ;
208- credentials = new NetworkCredential ( userpass . Username , userpass . Password ) ;
210+ credentialCache . Add ( url , scheme , new NetworkCredential ( userpass . Username , userpass . Password ) ) ;
209211 }
210212
211213 continue ;
0 commit comments