Skip to content

Commit e8a4a37

Browse files
committed
Allowing multiple parameters with the same name, optionally.
1 parent 65ba8f7 commit e8a4a37

File tree

2 files changed

+25
-6
lines changed

2 files changed

+25
-6
lines changed

RestSharp/IRestClient.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,8 @@ public interface IRestClient
6161

6262
string BaseHost { get; set; }
6363

64+
bool AllowMultipleDefaultParametersWithSameName { get; set; }
65+
6466
RestRequestAsyncHandle ExecuteAsync(IRestRequest request, Action<IRestResponse, RestRequestAsyncHandle> callback);
6567

6668
RestRequestAsyncHandle ExecuteAsync<T>(IRestRequest request, Action<IRestResponse<T>, RestRequestAsyncHandle> callback);

RestSharp/RestClient.cs

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -193,11 +193,17 @@ public RestClient(string baseUrl) : this()
193193
public IList<Parameter> DefaultParameters { get; }
194194

195195
/// <summary>
196-
/// Explicit Host header value to use in requests independent from the request URI.
197-
/// If null, default host value extracted from URI is used.
196+
/// Explicit Host header value to use in requests independent from the request URI.
197+
/// If null, default host value extracted from URI is used.
198198
/// </summary>
199199
public string BaseHost { get; set; }
200200

201+
/// <summary>
202+
/// Set to true if you need to add multiple default parameters with the same name.
203+
/// Only query and form parameters are supported.
204+
/// </summary>
205+
public bool AllowMultipleDefaultParametersWithSameName { get; set; } = false;
206+
201207
/// <summary>
202208
/// Registers a content handler to process response content
203209
/// </summary>
@@ -362,6 +368,9 @@ private static string EncodeParameter(Parameter parameter, Encoding encoding) =>
362368
: string.Concat(parameter.Name.UrlEncode(encoding), "=",
363369
parameter.Value.ToString().UrlEncode(encoding));
364370

371+
private static readonly ParameterType[] MultiParameterTypes =
372+
{ParameterType.QueryString, ParameterType.GetOrPost};
373+
365374
private void ConfigureHttp(IRestRequest request, IHttp http)
366375
{
367376
http.Encoding = Encoding;
@@ -374,7 +383,15 @@ private void ConfigureHttp(IRestRequest request, IHttp http)
374383
// move RestClient.DefaultParameters into Request.Parameters
375384
foreach (var p in DefaultParameters)
376385
{
377-
if (request.Parameters.Any(p2 => p2.Name == p.Name && p2.Type == p.Type))
386+
var parameterExists = request.Parameters.Any(p2 => p2.Name == p.Name && p2.Type == p.Type);
387+
388+
if (AllowMultipleDefaultParametersWithSameName)
389+
{
390+
var isMultiParameter = MultiParameterTypes.Any(pt => pt == p.Type);
391+
parameterExists = !isMultiParameter && parameterExists;
392+
}
393+
394+
if (parameterExists)
378395
continue;
379396

380397
request.AddParameter(p);
@@ -423,7 +440,7 @@ private void ConfigureHttp(IRestRequest request, IHttp http)
423440

424441
if (request.Credentials != null)
425442
http.Credentials = request.Credentials;
426-
443+
427444
if (!string.IsNullOrEmpty(ConnectionGroupName))
428445
http.ConnectionGroupName = ConnectionGroupName;
429446

@@ -499,10 +516,10 @@ private void ConfigureHttp(IRestRequest request, IHttp http)
499516
}
500517

501518
http.Proxy = Proxy ?? HttpWebRequest.GetSystemWebProxy();
502-
519+
503520
var _ = WebRequest.DefaultWebProxy;
504521
WebRequest.DefaultWebProxy = http.Proxy;
505-
522+
506523
http.RemoteCertificateValidationCallback = RemoteCertificateValidationCallback;
507524
}
508525

0 commit comments

Comments
 (0)