@@ -204,7 +204,14 @@ public static RestRequest AddOrUpdateHeaders(this RestRequest request, ICollecti
204
204
/// <param name="encode">Encode the value or not, default true</param>
205
205
/// <returns></returns>
206
206
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 ) ) ;
208
215
209
216
/// <summary>
210
217
/// 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
218
225
/// <param name="type">Enum value specifying what kind of parameter is being added</param>
219
226
/// <param name="encode">Encode the value or not, default true</param>
220
227
/// <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
+ }
223
235
224
236
/// <summary>
225
237
/// 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
228
240
/// <param name="request">Request instance</param>
229
241
/// <param name="parameter">Parameter instance</param>
230
242
/// <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 ) ;
235
245
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 ;
238
249
}
239
250
240
251
/// <summary>
@@ -245,8 +256,7 @@ public static RestRequest AddOrUpdateParameter(this RestRequest request, Paramet
245
256
/// <param name="parameters">Collection of parameter instances</param>
246
257
/// <returns></returns>
247
258
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 ) ;
250
260
251
261
return request ;
252
262
}
@@ -304,15 +314,15 @@ public static RestRequest AddFile(
304
314
public static RestRequest AddBody ( this RestRequest request , object obj , string ? contentType = null ) {
305
315
if ( contentType == null ) {
306
316
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 ) )
311
321
} ;
312
322
}
313
323
314
324
return
315
- obj is string str ? request . AddParameter ( new BodyParameter ( "" , str , contentType ) ) :
325
+ obj is string str ? request . AddStringBody ( str , contentType ) :
316
326
obj is byte [ ] bytes ? request . AddParameter ( new BodyParameter ( "" , bytes , contentType , DataFormat . Binary ) ) :
317
327
contentType . Contains ( "xml" ) ? request . AddXmlBody ( obj , contentType ) :
318
328
contentType . Contains ( "json" ) ? request . AddJsonBody ( obj , contentType ) :
@@ -352,7 +362,7 @@ public static RestRequest AddStringBody(this RestRequest request, string body, s
352
362
/// <returns></returns>
353
363
public static RestRequest AddJsonBody < T > ( this RestRequest request , T obj , string contentType = ContentType . Json ) where T : class {
354
364
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 ) ) ;
356
366
}
357
367
358
368
/// <summary>
@@ -366,8 +376,10 @@ public static RestRequest AddJsonBody<T>(this RestRequest request, T obj, string
366
376
public static RestRequest AddXmlBody < T > ( this RestRequest request , T obj , string contentType = ContentType . Xml , string xmlNamespace = "" )
367
377
where T : class {
368
378
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 ) ) ;
371
383
}
372
384
373
385
/// <summary>
@@ -401,7 +413,6 @@ static void CheckAndThrowsDuplicateKeys(ICollection<KeyValuePair<string, string>
401
413
. Select ( group => group . Key )
402
414
. ToList ( ) ;
403
415
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 ) } ") ;
406
417
}
407
- }
418
+ }
0 commit comments