1414using System . Threading . Tasks ;
1515using APIMatic . Core . Http . Configuration ;
1616using APIMatic . Core . Types . Sdk ;
17+ using APIMatic . Core . Utilities ;
1718using Polly ;
1819using Polly . Retry ;
1920using Polly . Timeout ;
@@ -104,38 +105,19 @@ private HttpRequestMessage CreateHttpRequestMessageFromRequest(CoreRequest reque
104105 HttpRequestMessage requestMessage = new HttpRequestMessage
105106 {
106107 RequestUri = new Uri ( request . QueryUrl ) ,
107- Method = request . HttpMethod ,
108+ Method = request . HttpMethod
108109 } ;
109110
110- if ( request . Headers != null )
111- {
112- foreach ( var headers in request . Headers )
113- {
114- requestMessage . Headers . TryAddWithoutValidation ( headers . Key , headers . Value ) ;
115- }
116- }
111+ AddHeadersToRequestMessage ( requestMessage , request ) ;
112+ if ( IsHeaderOnlyHttpMethod ( request . HttpMethod ) ) return requestMessage ;
117113
118- if ( IsHeaderOnlyHttpMethod ( request . HttpMethod ) )
114+ if ( request . HasFormParameters )
119115 {
116+ requestMessage . Content = GetFormContent ( request ) ;
120117 return requestMessage ;
121118 }
122119
123- if ( request . Body == null )
124- {
125- if ( CheckFormParametersForMultiPart ( request . FormParameters ) )
126- {
127- requestMessage . Content = GetMultipartFormDataContentFromRequest ( request ) ;
128- return requestMessage ;
129- }
130-
131- requestMessage . Content = new FormUrlEncodedContent ( request . FormParameters . Select ( param => new KeyValuePair < string , string > ( param . Key , param . Value . ToString ( ) ) ) . ToList ( ) ) ;
132- return requestMessage ;
133- }
134-
135- string contentType = request . Headers ? . Where ( p => p . Key . Equals ( "content-type" , StringComparison . InvariantCultureIgnoreCase ) )
136- . Select ( x => x . Value )
137- . FirstOrDefault ( ) ;
138-
120+ var contentType = request . GetContentType ( ) ;
139121 if ( request . Body is CoreFileStreamInfo file )
140122 {
141123 file . FileStream . Position = 0 ;
@@ -146,21 +128,50 @@ private HttpRequestMessage CreateHttpRequestMessageFromRequest(CoreRequest reque
146128
147129 if ( string . IsNullOrEmpty ( contentType ) )
148130 {
149- requestMessage . Content = new StringContent ( request . Body . ToString ( ) , Encoding . UTF8 , "text/plain" ) ;
131+ requestMessage . Content =
132+ new StringContent ( request . GetBodyAsString ( ) , Encoding . UTF8 , "text/plain" ) ;
150133 return requestMessage ;
151134 }
152135
153- if ( contentType . Equals ( "application/json; charset=utf-8" , StringComparison . OrdinalIgnoreCase ) )
136+ if ( IsContentTypeJsonUtf8 ( contentType ) )
154137 {
155- requestMessage . Content = new StringContent ( request . Body . ToString ( ) , Encoding . UTF8 , "application/json" ) ;
138+ requestMessage . Content =
139+ new StringContent ( request . GetBodyAsString ( ) , Encoding . UTF8 , "application/json" ) ;
156140 return requestMessage ;
157141 }
158142
143+ if ( request . Body == null ) return requestMessage ;
144+
159145 requestMessage . Content = GetByteArrayContentFromRequestBody ( request . Body ) ;
160146 GetByteArrayContentType ( requestMessage . Content . Headers , contentType ) ;
161147 return requestMessage ;
162148 }
149+
150+ private static void AddHeadersToRequestMessage ( HttpRequestMessage requestMessage , CoreRequest request )
151+ {
152+ foreach ( var headers in request . Headers ?? Enumerable . Empty < KeyValuePair < string , string > > ( ) )
153+ {
154+ requestMessage . Headers . TryAddWithoutValidation ( headers . Key , headers . Value ) ;
155+ }
156+ }
163157
158+ private static HttpContent GetFormContent ( CoreRequest request )
159+ {
160+ if ( CheckFormParametersForMultiPart ( request . FormParameters ) )
161+ {
162+ return GetMultipartFormDataContentFromRequest ( request ) ;
163+ }
164+
165+ return new FormUrlEncodedContent ( request . FormParameters
166+ . Select ( param => new KeyValuePair < string , string > ( param . Key , param . Value . ToString ( ) ) ) . ToList ( ) ) ;
167+ }
168+
169+ private static bool IsContentTypeJsonUtf8 ( string contentType )
170+ {
171+ return contentType . EqualsIgnoreCase ( "application/json" ) ||
172+ contentType . EqualsIgnoreCase ( "application/json; charset=utf-8" ) ;
173+ }
174+
164175 private static void GetByteArrayContentType ( HttpContentHeaders contentHeader , string contentType )
165176 {
166177 try
@@ -239,9 +250,8 @@ private static bool IsHeaderOnlyHttpMethod(HttpMethod method)
239250
240251 private static bool CheckFormParametersForMultiPart ( IReadOnlyCollection < KeyValuePair < string , object > > formParameters )
241252 {
242- return formParameters != null &&
243- ( formParameters . Any ( f => f . Value is MultipartContent ) ||
244- formParameters . Any ( f => f . Value is CoreFileStreamInfo ) ) ;
253+ return formParameters . Any ( f => f . Value is MultipartContent ) ||
254+ formParameters . Any ( f => f . Value is CoreFileStreamInfo ) ;
245255 }
246256
247257 private bool ShouldRetry ( HttpResponseMessage response , RetryOption retryOption )
0 commit comments