Skip to content

Commit 5d02865

Browse files
Merge pull request restsharp#850 from andrewchaa/master
AddOrUpdateParameter, convenience method
2 parents c2abb0a + 967eb81 commit 5d02865

File tree

3 files changed

+122
-0
lines changed

3 files changed

+122
-0
lines changed

RestSharp.Tests/UrlBuilderTests.cs

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -267,5 +267,36 @@ public void GET_with_Invalid_Url_string_throws_exception()
267267
{
268268
Assert.Throws<UriFormatException>(delegate { new RestClient("invalid url"); });
269269
}
270+
271+
[Test]
272+
public void Should_add_parameter_if_it_is_new()
273+
{
274+
RestRequest request = new RestRequest();
275+
276+
request.AddOrUpdateParameter("param2", "value2");
277+
request.AddOrUpdateParameter("param3", "value3");
278+
279+
RestClient client = new RestClient("http://example.com/resource?param1=value1");
280+
Uri expected = new Uri("http://example.com/resource?param1=value1&param2=value2&param3=value3");
281+
Uri output = client.BuildUri(request);
282+
283+
Assert.AreEqual(expected, output);
284+
}
285+
286+
[Test]
287+
public void Should_update_parameter_if_it_already_exists()
288+
{
289+
RestRequest request = new RestRequest();
290+
291+
request.AddOrUpdateParameter("param2", "value2");
292+
request.AddOrUpdateParameter("param2", "value2-1");
293+
294+
RestClient client = new RestClient("http://example.com/resource?param1=value1");
295+
Uri expected = new Uri("http://example.com/resource?param1=value1&param2=value2-1");
296+
Uri output = client.BuildUri(request);
297+
298+
Assert.AreEqual(expected, output);
299+
}
300+
270301
}
271302
}

RestSharp/IRestRequest.cs

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -276,6 +276,50 @@ public interface IRestRequest
276276
/// <returns>This request</returns>
277277
IRestRequest AddParameter(string name, object value, string contentType, ParameterType type);
278278

279+
/// <summary>
280+
/// Add or update the parameter to the request
281+
/// </summary>
282+
/// <param name="p">Parameter to add</param>
283+
/// <returns></returns>
284+
IRestRequest AddOrUpdateParameter(Parameter p);
285+
286+
/// <summary>
287+
/// Adds a HTTP parameter to the request (QueryString for GET, DELETE, OPTIONS and HEAD; Encoded form for POST and PUT)
288+
/// </summary>
289+
/// <param name="name">Name of the parameter</param>
290+
/// <param name="value">Value of the parameter</param>
291+
/// <returns>This request</returns>
292+
IRestRequest AddOrUpdateParameter(string name, object value);
293+
294+
/// <summary>
295+
/// Adds a parameter to the request. There are five types of parameters:
296+
/// - GetOrPost: Either a QueryString value or encoded form value based on method
297+
/// - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection
298+
/// - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId}
299+
/// - Cookie: Adds the name/value pair to the HTTP request's Cookies collection
300+
/// - RequestBody: Used by AddBody() (not recommended to use directly)
301+
/// </summary>
302+
/// <param name="name">Name of the parameter</param>
303+
/// <param name="value">Value of the parameter</param>
304+
/// <param name="type">The type of parameter to add</param>
305+
/// <returns>This request</returns>
306+
IRestRequest AddOrUpdateParameter(string name, object value, ParameterType type);
307+
308+
/// <summary>
309+
/// Adds a parameter to the request. There are five types of parameters:
310+
/// - GetOrPost: Either a QueryString value or encoded form value based on method
311+
/// - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection
312+
/// - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId}
313+
/// - Cookie: Adds the name/value pair to the HTTP request's Cookies collection
314+
/// - RequestBody: Used by AddBody() (not recommended to use directly)
315+
/// </summary>
316+
/// <param name="name">Name of the parameter</param>
317+
/// <param name="value">Value of the parameter</param>
318+
/// <param name="contentType">Content-Type of the parameter</param>
319+
/// <param name="type">The type of parameter to add</param>
320+
/// <returns>This request</returns>
321+
IRestRequest AddOrUpdateParameter(string name, object value, string contentType, ParameterType type);
322+
279323
/// <summary>
280324
/// Shortcut to AddParameter(name, value, HttpHeader) overload
281325
/// </summary>

RestSharp/RestRequest.cs

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -458,6 +458,53 @@ public IRestRequest AddParameter(string name, object value, string contentType,
458458
});
459459
}
460460

461+
public IRestRequest AddOrUpdateParameter(Parameter p)
462+
{
463+
if (Parameters.Any(param => param.Name == p.Name))
464+
{
465+
var parameter = this.Parameters.First(param => param.Name == p.Name);
466+
parameter.Value = p.Value;
467+
return this;
468+
}
469+
470+
this.Parameters.Add(p);
471+
return this;
472+
}
473+
474+
public IRestRequest AddOrUpdateParameter(string name, object value)
475+
{
476+
return this.AddOrUpdateParameter(new Parameter
477+
{
478+
Name = name,
479+
Value = value,
480+
Type = ParameterType.GetOrPost
481+
});
482+
483+
}
484+
485+
public IRestRequest AddOrUpdateParameter(string name, object value, ParameterType type)
486+
{
487+
return this.AddOrUpdateParameter(new Parameter
488+
{
489+
Name = name,
490+
Value = value,
491+
Type = type
492+
});
493+
494+
}
495+
496+
public IRestRequest AddOrUpdateParameter(string name, object value, string contentType, ParameterType type)
497+
{
498+
return this.AddOrUpdateParameter(new Parameter
499+
{
500+
Name = name,
501+
Value = value,
502+
ContentType = contentType,
503+
Type = type
504+
});
505+
506+
}
507+
461508
/// <summary>
462509
/// Shortcut to AddParameter(name, value, HttpHeader) overload
463510
/// </summary>

0 commit comments

Comments
 (0)