@@ -49,10 +49,26 @@ private class ManagedHttpSmartSubtransportStream : SmartSubtransportStream
49
49
{
50
50
private static int MAX_REDIRECTS = 7 ;
51
51
52
+ private static readonly HttpClientHandler httpClientHandler ;
53
+ private static readonly CredentialCache credentialCache ;
54
+
52
55
private MemoryStream postBuffer = new MemoryStream ( ) ;
53
56
private HttpResponseMessage response ;
54
57
private Stream responseStream ;
55
58
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
+
56
72
public ManagedHttpSmartSubtransportStream ( ManagedHttpSmartSubtransport parent , string endpointUrl , bool isPost , string contentType )
57
73
: base ( parent )
58
74
{
@@ -63,7 +79,7 @@ public ManagedHttpSmartSubtransportStream(ManagedHttpSmartSubtransport parent, s
63
79
64
80
private HttpClient CreateHttpClient ( HttpMessageHandler handler )
65
81
{
66
- return new HttpClient ( handler )
82
+ return new HttpClient ( handler , false )
67
83
{
68
84
DefaultRequestHeaders =
69
85
{
@@ -73,17 +89,6 @@ private HttpClient CreateHttpClient(HttpMessageHandler handler)
73
89
} ;
74
90
}
75
91
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
-
87
92
private Uri EndpointUrl { get ; set ; }
88
93
89
94
private bool IsPost { get ; set ; }
@@ -157,16 +162,12 @@ private HttpRequestMessage CreateRequest(Uri endpointUrl, bool isPost)
157
162
158
163
private HttpResponseMessage GetResponseWithRedirects ( )
159
164
{
160
- ICredentials credentials = null ;
161
165
var url = EndpointUrl ;
162
166
int retries ;
163
167
164
168
for ( retries = 0 ; ; retries ++ )
165
169
{
166
- var httpClientHandler = CreateClientHandler ( ) ;
167
- httpClientHandler . Credentials = credentials ;
168
-
169
- using ( var httpClient = this . CreateHttpClient ( httpClientHandler ) )
170
+ using ( var httpClient = CreateHttpClient ( httpClientHandler ) )
170
171
{
171
172
var request = CreateRequest ( url , IsPost ) ;
172
173
@@ -198,14 +199,15 @@ private HttpResponseMessage GetResponseWithRedirects()
198
199
throw new InvalidOperationException ( "authentication cancelled" ) ;
199
200
}
200
201
202
+ var scheme = response . Headers . WwwAuthenticate . First ( ) . Scheme ;
203
+
201
204
if ( cred is DefaultCredentials )
202
205
{
203
- credentials = CredentialCache . DefaultNetworkCredentials ;
206
+ credentialCache . Add ( url , scheme , CredentialCache . DefaultNetworkCredentials ) ;
204
207
}
205
- else if ( cred is UsernamePasswordCredentials )
208
+ else if ( cred is UsernamePasswordCredentials userpass )
206
209
{
207
- UsernamePasswordCredentials userpass = ( UsernamePasswordCredentials ) cred ;
208
- credentials = new NetworkCredential ( userpass . Username , userpass . Password ) ;
210
+ credentialCache . Add ( url , scheme , new NetworkCredential ( userpass . Username , userpass . Password ) ) ;
209
211
}
210
212
211
213
continue ;
0 commit comments