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 }; }