@@ -204,7 +204,14 @@ 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 . AddBodyParameter ( name , value )
209+ : request . AddParameter ( Parameter . CreateParameter ( name , value , type , encode ) ) ;
210+
211+ static RestRequest AddBodyParameter ( this RestRequest request , string ? name , object value )
212+ => name != null && name . Contains ( "/" )
213+ ? request . AddBody ( value , name )
214+ : request . AddParameter ( new BodyParameter ( name , value , ContentType . Plain ) ) ;
208215
209216 /// <summary>
210217 /// Adds or updates request parameter of a given type. It will create a typed parameter instance based on the type argument.
@@ -218,8 +225,13 @@ public static RestRequest AddParameter(this RestRequest request, string? name, o
218225 /// <param name="type">Enum value specifying what kind of parameter is being added</param>
219226 /// <param name="encode">Encode the value or not, default true</param>
220227 /// <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 ) ) ;
228+ public static RestRequest AddOrUpdateParameter ( this RestRequest request , string name , object value , ParameterType type , bool encode = true ) {
229+ request . RemoveParameter ( name , type ) ;
230+
231+ return type == ParameterType . RequestBody
232+ ? request . AddBodyParameter ( name , value )
233+ : request . AddOrUpdateParameter ( Parameter . CreateParameter ( name , value , type , encode ) ) ;
234+ }
223235
224236 /// <summary>
225237 /// Adds or updates request parameter, given the parameter instance, for example <see cref="QueryParameter"/> or <see cref="UrlSegmentParameter"/>.
@@ -228,13 +240,12 @@ public static RestRequest AddOrUpdateParameter(this RestRequest request, string
228240 /// <param name="request">Request instance</param>
229241 /// <param name="parameter">Parameter instance</param>
230242 /// <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 ) ;
243+ public static RestRequest AddOrUpdateParameter ( this RestRequest request , Parameter parameter )
244+ => request . RemoveParameter ( parameter . Name , parameter . Type ) . AddParameter ( parameter ) ;
235245
236- request . AddParameter ( parameter ) ;
237- return request ;
246+ static RestRequest RemoveParameter ( this RestRequest request , string ? name , ParameterType type ) {
247+ var p = request . Parameters . FirstOrDefault ( x => x . Name == name && x . Type == type ) ;
248+ return p != null ? request . RemoveParameter ( p ) : request ;
238249 }
239250
240251 /// <summary>
@@ -245,8 +256,7 @@ public static RestRequest AddOrUpdateParameter(this RestRequest request, Paramet
245256 /// <param name="parameters">Collection of parameter instances</param>
246257 /// <returns></returns>
247258 public static RestRequest AddOrUpdateParameters ( this RestRequest request , IEnumerable < Parameter > parameters ) {
248- foreach ( var parameter in parameters )
249- request . AddOrUpdateParameter ( parameter ) ;
259+ foreach ( var parameter in parameters ) request . AddOrUpdateParameter ( parameter ) ;
250260
251261 return request ;
252262 }
@@ -304,15 +314,15 @@ public static RestRequest AddFile(
304314 public static RestRequest AddBody ( this RestRequest request , object obj , string ? contentType = null ) {
305315 if ( contentType == null ) {
306316 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 ) )
317+ DataFormat . Json => request . AddJsonBody ( obj ) ,
318+ DataFormat . Xml => request . AddXmlBody ( obj ) ,
319+ DataFormat . Binary => request . AddParameter ( new BodyParameter ( "" , obj , ContentType . Binary ) ) ,
320+ _ => request . AddParameter ( new BodyParameter ( "" , obj . ToString ( ) ! , ContentType . Plain ) )
311321 } ;
312322 }
313323
314324 return
315- obj is string str ? request . AddParameter ( new BodyParameter ( "" , str , contentType ) ) :
325+ obj is string str ? request . AddStringBody ( str , contentType ) :
316326 obj is byte [ ] bytes ? request . AddParameter ( new BodyParameter ( "" , bytes , contentType , DataFormat . Binary ) ) :
317327 contentType . Contains ( "xml" ) ? request . AddXmlBody ( obj , contentType ) :
318328 contentType . Contains ( "json" ) ? request . AddJsonBody ( obj , contentType ) :
@@ -352,7 +362,7 @@ public static RestRequest AddStringBody(this RestRequest request, string body, s
352362 /// <returns></returns>
353363 public static RestRequest AddJsonBody < T > ( this RestRequest request , T obj , string contentType = ContentType . Json ) where T : class {
354364 request . RequestFormat = DataFormat . Json ;
355- return request . AddParameter ( new JsonParameter ( "" , obj , contentType ) ) ;
365+ return obj is string str ? request . AddStringBody ( str , DataFormat . Json ) : request . AddParameter ( new JsonParameter ( "" , obj , contentType ) ) ;
356366 }
357367
358368 /// <summary>
@@ -366,8 +376,10 @@ public static RestRequest AddJsonBody<T>(this RestRequest request, T obj, string
366376 public static RestRequest AddXmlBody < T > ( this RestRequest request , T obj , string contentType = ContentType . Xml , string xmlNamespace = "" )
367377 where T : class {
368378 request . RequestFormat = DataFormat . Xml ;
369- request . AddParameter ( new XmlParameter ( "" , obj , xmlNamespace , contentType ) ) ;
370- return request ;
379+
380+ return obj is string str
381+ ? request . AddStringBody ( str , DataFormat . Xml )
382+ : request . AddParameter ( new XmlParameter ( "" , obj , xmlNamespace , contentType ) ) ;
371383 }
372384
373385 /// <summary>
@@ -401,7 +413,6 @@ static void CheckAndThrowsDuplicateKeys(ICollection<KeyValuePair<string, string>
401413 . Select ( group => group . Key )
402414 . ToList ( ) ;
403415
404- if ( duplicateKeys . Any ( ) )
405- throw new ArgumentException ( $ "Duplicate header names exist: { string . Join ( ", " , duplicateKeys ) } ") ;
416+ if ( duplicateKeys . Any ( ) ) throw new ArgumentException ( $ "Duplicate header names exist: { string . Join ( ", " , duplicateKeys ) } ") ;
406417 }
407- }
418+ }
0 commit comments