@@ -22,38 +22,82 @@ internal static StringBuilder Initialize(HttpMethod httpMethod)
2222 return stringBuilder . Append ( ' ' ) ;
2323 }
2424
25- internal static StringBuilder AddAbsoluteUrl ( this StringBuilder stringBuilder , string inputBaseAddress , Uri inputRequestUri )
25+ internal static StringBuilder AddAbsoluteUrl ( this StringBuilder stringBuilder , string inputBaseAddress ,
26+ Uri inputRequestUri )
2627 {
27- string requestUri ;
28+ string address ;
2829 Uri baseAddressUri = Helpers . CreateUri ( inputBaseAddress ) ;
2930 bool baseAddressIsAbsoluteUri = Helpers . CheckAddressIsAbsoluteUri ( baseAddressUri ) ;
3031 bool requestUriIsAbsoluteUri = Helpers . CheckAddressIsAbsoluteUri ( inputRequestUri ) ;
3132
3233 if ( inputRequestUri is null && baseAddressUri is not null && baseAddressIsAbsoluteUri )
33- requestUri = baseAddressUri . ToString ( ) ;
34+ address = baseAddressUri . ToString ( ) ;
3435 else if ( baseAddressUri is null && inputRequestUri is not null && requestUriIsAbsoluteUri )
35- requestUri = inputRequestUri . ToString ( ) ;
36- else if ( baseAddressUri is not null && inputRequestUri is not null && baseAddressIsAbsoluteUri && ! requestUriIsAbsoluteUri )
37- requestUri = new Uri ( baseAddressUri , inputRequestUri ) . ToString ( ) ;
36+ address = inputRequestUri . ToString ( ) ;
37+ else if ( baseAddressUri is not null && inputRequestUri is not null && baseAddressIsAbsoluteUri &&
38+ ! requestUriIsAbsoluteUri )
39+ address = new Uri ( baseAddressUri , inputRequestUri ) . ToString ( ) ;
3840 else if ( baseAddressUri is not null && inputRequestUri is not null && baseAddressIsAbsoluteUri )
39- requestUri = inputRequestUri . ToString ( ) ;
41+ address = inputRequestUri . ToString ( ) ;
4042 else if ( baseAddressUri is null && inputRequestUri is null )
41- requestUri = null ;
43+ address = null ;
4244 else
43- requestUri = $ "{ baseAddressUri } { inputRequestUri } ";
45+ address = $ "{ baseAddressUri } { inputRequestUri } ";
46+
47+ var encodedAddress = ApplyEncodeUri ( address ) ;
4448
4549 return stringBuilder
46- . Append ( $ "{ requestUri } ")
50+ . Append ( $ "{ encodedAddress ?? address } ")
4751 . Append ( ' ' ) ;
4852 }
4953
50- internal static StringBuilder AddHeaders ( this StringBuilder stringBuilder , HttpClient httpClient , HttpRequestMessage httpRequestMessage , bool needAddDefaultHeaders = true )
54+ private static string ApplyEncodeUri ( string address )
55+ {
56+ string result = null ;
57+
58+ if ( address is not null )
59+ {
60+ var questionMarkItems = address . Split ( '?' ) ;
61+ if ( questionMarkItems . Length > 1 )
62+ {
63+ var andItems = questionMarkItems [ 1 ] . Split ( '&' ) ;
64+ if ( andItems . Length > 1 )
65+ {
66+ var addressEncodedStringBuilder = new StringBuilder ( )
67+ . Append ( questionMarkItems [ 0 ] )
68+ . Append ( '?' ) ;
69+ foreach ( var ai in andItems )
70+ {
71+ var equalItems = ai . Split ( '=' ) ;
72+ if ( equalItems . Length > 1 )
73+ {
74+ addressEncodedStringBuilder
75+ . Append ( equalItems [ 0 ] )
76+ . Append ( '=' )
77+ . Append ( Uri . EscapeDataString ( equalItems [ 1 ] ) )
78+ . Append ( '&' ) ;
79+ }
80+ }
81+
82+ result = addressEncodedStringBuilder
83+ . Remove ( addressEncodedStringBuilder . Length - 1 , 1 )
84+ . ToString ( ) ;
85+ }
86+ }
87+ }
88+
89+ return result ;
90+ }
91+
92+ internal static StringBuilder AddHeaders ( this StringBuilder stringBuilder , HttpClient httpClient ,
93+ HttpRequestMessage httpRequestMessage , bool needAddDefaultHeaders = true )
5194 {
5295 bool hasHeader = false ;
5396
5497 if ( needAddDefaultHeaders && httpClient . DefaultRequestHeaders . Any ( ) )
5598 {
56- var defaultHeaders = httpClient . DefaultRequestHeaders . Where ( dh => dh . Key != HttpRequestHeader . ContentLength . ToString ( ) ) ;
99+ var defaultHeaders =
100+ httpClient . DefaultRequestHeaders . Where ( dh => dh . Key != HttpRequestHeader . ContentLength . ToString ( ) ) ;
57101 foreach ( var header in defaultHeaders )
58102 {
59103 stringBuilder
@@ -83,7 +127,8 @@ internal static StringBuilder AddHeaders(this StringBuilder stringBuilder, HttpC
83127
84128 if ( httpRequestMessage . Content is not null && httpRequestMessage . Content . Headers . Any ( ) )
85129 {
86- foreach ( var header in httpRequestMessage . Content . Headers . Where ( h => h . Key != HttpRequestHeader . ContentLength . ToString ( ) ) )
130+ foreach ( var header in httpRequestMessage . Content . Headers . Where ( h =>
131+ h . Key != HttpRequestHeader . ContentLength . ToString ( ) ) )
87132 {
88133 stringBuilder
89134 . Append ( "-H" )
0 commit comments