diff --git a/src/RestSharp/Parameters/DefaultParameters.cs b/src/RestSharp/Parameters/DefaultParameters.cs
index 02373f713..6d3dc89a7 100644
--- a/src/RestSharp/Parameters/DefaultParameters.cs
+++ b/src/RestSharp/Parameters/DefaultParameters.cs
@@ -22,7 +22,14 @@ public sealed class DefaultParameters : ParametersCollection {
public DefaultParameters(ReadOnlyRestClientOptions options) => _options = options;
- public void AddParameter(Parameter parameter) {
+ ///
+ /// Safely add a default parameter to the collection.
+ ///
+ /// Parameter to add
+ ///
+ ///
+ ///
+ public DefaultParameters AddParameter(Parameter parameter) {
lock (_lock) {
if (parameter.Type == ParameterType.RequestBody)
throw new NotSupportedException(
@@ -30,14 +37,43 @@ public void AddParameter(Parameter parameter) {
);
if (!_options.AllowMultipleDefaultParametersWithSameName &&
- !MultiParameterTypes.Contains(parameter.Type) &&
+ !MultiParameterTypes.Contains(parameter.Type) &&
this.Any(x => x.Name == parameter.Name)) {
throw new ArgumentException("A default parameters with the same name has already been added", nameof(parameter));
}
Parameters.Add(parameter);
}
+
+ return this;
}
+ ///
+ /// Safely removes all the default parameters with the given name and type.
+ ///
+ /// Parameter name
+ /// Parameter type
+ ///
+ [PublicAPI]
+ public DefaultParameters RemoveParameter(string name, ParameterType type) {
+ lock (_lock) {
+ Parameters.RemoveAll(x => x.Name == name && x.Type == type);
+ }
+
+ return this;
+ }
+
+ ///
+ /// Replace a default parameter with the same name and type.
+ ///
+ /// Parameter instance
+ ///
+ [PublicAPI]
+ public DefaultParameters ReplaceParameter(Parameter parameter)
+ =>
+ // ReSharper disable once NotResolvedInText
+ RemoveParameter(Ensure.NotEmptyString(parameter.Name, "Parameter name"), parameter.Type)
+ .AddParameter(parameter);
+
static readonly ParameterType[] MultiParameterTypes = { ParameterType.QueryString, ParameterType.GetOrPost };
}