Skip to content

Commit 62ff3aa

Browse files
Add Remove and Replace parameter functions to DefaultParameters (#2047)
1 parent d8e1e9a commit 62ff3aa

File tree

1 file changed

+38
-2
lines changed

1 file changed

+38
-2
lines changed

src/RestSharp/Parameters/DefaultParameters.cs

Lines changed: 38 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,22 +22,58 @@ public sealed class DefaultParameters : ParametersCollection {
2222

2323
public DefaultParameters(ReadOnlyRestClientOptions options) => _options = options;
2424

25-
public void AddParameter(Parameter parameter) {
25+
/// <summary>
26+
/// Safely add a default parameter to the collection.
27+
/// </summary>
28+
/// <param name="parameter">Parameter to add</param>
29+
/// <returns></returns>
30+
/// <exception cref="NotSupportedException"></exception>
31+
/// <exception cref="ArgumentException"></exception>
32+
public DefaultParameters AddParameter(Parameter parameter) {
2633
lock (_lock) {
2734
if (parameter.Type == ParameterType.RequestBody)
2835
throw new NotSupportedException(
2936
"Cannot set request body using default parameters. Use Request.AddBody() instead."
3037
);
3138

3239
if (!_options.AllowMultipleDefaultParametersWithSameName &&
33-
!MultiParameterTypes.Contains(parameter.Type) &&
40+
!MultiParameterTypes.Contains(parameter.Type) &&
3441
this.Any(x => x.Name == parameter.Name)) {
3542
throw new ArgumentException("A default parameters with the same name has already been added", nameof(parameter));
3643
}
3744

3845
Parameters.Add(parameter);
3946
}
47+
48+
return this;
4049
}
4150

51+
/// <summary>
52+
/// Safely removes all the default parameters with the given name and type.
53+
/// </summary>
54+
/// <param name="name">Parameter name</param>
55+
/// <param name="type">Parameter type</param>
56+
/// <returns></returns>
57+
[PublicAPI]
58+
public DefaultParameters RemoveParameter(string name, ParameterType type) {
59+
lock (_lock) {
60+
Parameters.RemoveAll(x => x.Name == name && x.Type == type);
61+
}
62+
63+
return this;
64+
}
65+
66+
/// <summary>
67+
/// Replace a default parameter with the same name and type.
68+
/// </summary>
69+
/// <param name="parameter">Parameter instance</param>
70+
/// <returns></returns>
71+
[PublicAPI]
72+
public DefaultParameters ReplaceParameter(Parameter parameter)
73+
=>
74+
// ReSharper disable once NotResolvedInText
75+
RemoveParameter(Ensure.NotEmptyString(parameter.Name, "Parameter name"), parameter.Type)
76+
.AddParameter(parameter);
77+
4278
static readonly ParameterType[] MultiParameterTypes = { ParameterType.QueryString, ParameterType.GetOrPost };
4379
}

0 commit comments

Comments
 (0)