@@ -221,19 +221,39 @@ protected virtual void OnSendingRemoteHttpRequest(SendingRemoteHttpRequestEventA
221221 this . SendingRemoteHttpRequest ? . Invoke ( this , eventArgs ) ;
222222 }
223223
224- private HttpClient CreateHttpClient ( )
224+ /// <summary>
225+ /// Creates an instance of <see cref="HttpClientHandler"/> as underlying handler,
226+ /// used by <see cref="CreateHttpClient"/>. Invoked only once when required.
227+ /// </summary>
228+ /// <returns>An instance of <see cref="HttpClientHandler"/>.</returns>
229+ protected virtual HttpClientHandler CreateHttpClientHandler ( )
225230 {
226- HttpClientHandler httpClientHandler = new HttpClientHandler ( ) ;
231+ HttpClientHandler httpClientHandler = new ( ) ;
232+
227233 string userInfo = this . remoteServerUri . UserInfo ;
228- if ( ! string . IsNullOrEmpty ( userInfo ) && userInfo . Contains ( ":" ) )
234+
235+ if ( ! string . IsNullOrEmpty ( userInfo ) && userInfo . Contains ( ':' ) )
229236 {
230- string [ ] userInfoComponents = this . remoteServerUri . UserInfo . Split ( new char [ ] { ':' } , 2 ) ;
237+ string [ ] userInfoComponents = this . remoteServerUri . UserInfo . Split ( [ ':' ] , 2 ) ;
231238 httpClientHandler . Credentials = new NetworkCredential ( userInfoComponents [ 0 ] , userInfoComponents [ 1 ] ) ;
232239 httpClientHandler . PreAuthenticate = true ;
233240 }
234241
235242 httpClientHandler . Proxy = this . Proxy ;
236243
244+ return httpClientHandler ;
245+ }
246+
247+ /// <summary>
248+ /// Creates an instance of <see cref="HttpClient"/> used by making all HTTP calls to remote end.
249+ /// Invoked only once when required.
250+ /// </summary>
251+ /// <returns>An instance of <see cref="HttpClient"/>.</returns>
252+ protected virtual HttpClient CreateHttpClient ( )
253+ {
254+ var httpClientHandler = CreateHttpClientHandler ( )
255+ ?? throw new InvalidOperationException ( $ "{ nameof ( CreateHttpClientHandler ) } method returned null") ;
256+
237257 HttpMessageHandler handler = httpClientHandler ;
238258
239259 if ( _logger . IsEnabled ( LogEventLevel . Trace ) )
@@ -242,15 +262,18 @@ private HttpClient CreateHttpClient()
242262 }
243263
244264 var client = new HttpClient ( handler ) ;
265+
245266 client . DefaultRequestHeaders . UserAgent . ParseAdd ( this . UserAgent ) ;
246267 client . DefaultRequestHeaders . Accept . ParseAdd ( RequestAcceptHeader ) ;
247268 client . DefaultRequestHeaders . ExpectContinue = false ;
269+
248270 if ( ! this . IsKeepAliveEnabled )
249271 {
250272 client . DefaultRequestHeaders . Connection . ParseAdd ( "close" ) ;
251273 }
252274
253275 client . Timeout = this . serverResponseTimeout ;
276+
254277 return client ;
255278 }
256279
0 commit comments