@@ -204,7 +204,9 @@ public static RestRequest AddOrUpdateHeaders(this RestRequest request, ICollecti
204204 /// <param name="encode">Encode the value or not, default true</param>
205205 /// <returns></returns>
206206 public static RestRequest AddParameter ( this RestRequest request , string ? name , object value , ParameterType type , bool encode = true )
207- => request . AddParameter ( Parameter . CreateParameter ( name , value , type , encode ) ) ;
207+ => type == ParameterType . RequestBody
208+ ? request . AddBody ( value , name )
209+ : request . AddParameter ( Parameter . CreateParameter ( name , value , type , encode ) ) ;
208210
209211 /// <summary>
210212 /// Adds or updates request parameter of a given type. It will create a typed parameter instance based on the type argument.
@@ -218,8 +220,12 @@ public static RestRequest AddParameter(this RestRequest request, string? name, o
218220 /// <param name="type">Enum value specifying what kind of parameter is being added</param>
219221 /// <param name="encode">Encode the value or not, default true</param>
220222 /// <returns></returns>
221- public static RestRequest AddOrUpdateParameter ( this RestRequest request , string name , object value , ParameterType type , bool encode = true )
222- => request . AddOrUpdateParameter ( Parameter . CreateParameter ( name , value , type , encode ) ) ;
223+ public static RestRequest AddOrUpdateParameter ( this RestRequest request , string name , object value , ParameterType type , bool encode = true ) {
224+ request . RemoveParameter ( name , type ) ;
225+ return type == ParameterType . RequestBody
226+ ? request . AddBody ( value , name )
227+ : request . AddOrUpdateParameter ( Parameter . CreateParameter ( name , value , type , encode ) ) ;
228+ }
223229
224230 /// <summary>
225231 /// Adds or updates request parameter, given the parameter instance, for example <see cref="QueryParameter"/> or <see cref="UrlSegmentParameter"/>.
@@ -228,13 +234,12 @@ public static RestRequest AddOrUpdateParameter(this RestRequest request, string
228234 /// <param name="request">Request instance</param>
229235 /// <param name="parameter">Parameter instance</param>
230236 /// <returns></returns>
231- public static RestRequest AddOrUpdateParameter ( this RestRequest request , Parameter parameter ) {
232- var p = request . Parameters . FirstOrDefault ( x => x . Name == parameter . Name && x . Type == parameter . Type ) ;
233-
234- if ( p != null ) request . RemoveParameter ( p ) ;
237+ public static RestRequest AddOrUpdateParameter ( this RestRequest request , Parameter parameter )
238+ => request . RemoveParameter ( parameter . Name , parameter . Type ) . AddParameter ( parameter ) ;
235239
236- request . AddParameter ( parameter ) ;
237- return request ;
240+ static RestRequest RemoveParameter ( this RestRequest request , string ? name , ParameterType type ) {
241+ var p = request . Parameters . FirstOrDefault ( x => x . Name == name && x . Type == type ) ;
242+ return p != null ? request . RemoveParameter ( p ) : request ;
238243 }
239244
240245 /// <summary>
@@ -245,8 +250,7 @@ public static RestRequest AddOrUpdateParameter(this RestRequest request, Paramet
245250 /// <param name="parameters">Collection of parameter instances</param>
246251 /// <returns></returns>
247252 public static RestRequest AddOrUpdateParameters ( this RestRequest request , IEnumerable < Parameter > parameters ) {
248- foreach ( var parameter in parameters )
249- request . AddOrUpdateParameter ( parameter ) ;
253+ foreach ( var parameter in parameters ) request . AddOrUpdateParameter ( parameter ) ;
250254
251255 return request ;
252256 }
@@ -304,15 +308,15 @@ public static RestRequest AddFile(
304308 public static RestRequest AddBody ( this RestRequest request , object obj , string ? contentType = null ) {
305309 if ( contentType == null ) {
306310 return request . RequestFormat switch {
307- DataFormat . Json => request . AddJsonBody ( obj , contentType ?? ContentType . Json ) ,
308- DataFormat . Xml => request . AddXmlBody ( obj , contentType ?? ContentType . Xml ) ,
309- DataFormat . Binary => request . AddParameter ( new BodyParameter ( "" , obj , contentType ?? ContentType . Binary ) ) ,
310- _ => request . AddParameter ( new BodyParameter ( "" , obj . ToString ( ) ! , contentType ?? ContentType . Plain ) )
311+ DataFormat . Json => request . AddJsonBody ( obj ) ,
312+ DataFormat . Xml => request . AddXmlBody ( obj ) ,
313+ DataFormat . Binary => request . AddParameter ( new BodyParameter ( "" , obj , ContentType . Binary ) ) ,
314+ _ => request . AddParameter ( new BodyParameter ( "" , obj . ToString ( ) ! , ContentType . Plain ) )
311315 } ;
312316 }
313317
314318 return
315- obj is string str ? request . AddParameter ( new BodyParameter ( "" , str , contentType ) ) :
319+ obj is string str ? request . AddStringBody ( str , contentType ) :
316320 obj is byte [ ] bytes ? request . AddParameter ( new BodyParameter ( "" , bytes , contentType , DataFormat . Binary ) ) :
317321 contentType . Contains ( "xml" ) ? request . AddXmlBody ( obj , contentType ) :
318322 contentType . Contains ( "json" ) ? request . AddJsonBody ( obj , contentType ) :
@@ -352,7 +356,7 @@ public static RestRequest AddStringBody(this RestRequest request, string body, s
352356 /// <returns></returns>
353357 public static RestRequest AddJsonBody < T > ( this RestRequest request , T obj , string contentType = ContentType . Json ) where T : class {
354358 request . RequestFormat = DataFormat . Json ;
355- return request . AddParameter ( new JsonParameter ( "" , obj , contentType ) ) ;
359+ return obj is string str ? request . AddStringBody ( str , DataFormat . Json ) : request . AddParameter ( new JsonParameter ( "" , obj , contentType ) ) ;
356360 }
357361
358362 /// <summary>
@@ -366,8 +370,10 @@ public static RestRequest AddJsonBody<T>(this RestRequest request, T obj, string
366370 public static RestRequest AddXmlBody < T > ( this RestRequest request , T obj , string contentType = ContentType . Xml , string xmlNamespace = "" )
367371 where T : class {
368372 request . RequestFormat = DataFormat . Xml ;
369- request . AddParameter ( new XmlParameter ( "" , obj , xmlNamespace , contentType ) ) ;
370- return request ;
373+
374+ return obj is string str
375+ ? request . AddStringBody ( str , DataFormat . Xml )
376+ : request . AddParameter ( new XmlParameter ( "" , obj , xmlNamespace , contentType ) ) ;
371377 }
372378
373379 /// <summary>
@@ -401,7 +407,6 @@ static void CheckAndThrowsDuplicateKeys(ICollection<KeyValuePair<string, string>
401407 . Select ( group => group . Key )
402408 . ToList ( ) ;
403409
404- if ( duplicateKeys . Any ( ) )
405- throw new ArgumentException ( $ "Duplicate header names exist: { string . Join ( ", " , duplicateKeys ) } ") ;
410+ if ( duplicateKeys . Any ( ) ) throw new ArgumentException ( $ "Duplicate header names exist: { string . Join ( ", " , duplicateKeys ) } ") ;
406411 }
407- }
412+ }
0 commit comments