restsharp/RestSharp · error · ArgumentException

A default parameters with the same name has already been add

Error message

A default parameters with the same name has already been added

What it means

Thrown by DefaultParameters.AddParameter when AllowMultipleDefaultParametersWithSameName is false (the default) and a non-header, non-multiparameter default parameter with the same name already exists in the collection. Prevents accidental silent overwrite of defaults.

Source

Thrown at src/RestSharp/Parameters/DefaultParameters.cs:37

public sealed class DefaultParameters(ReadOnlyRestClientOptions options) : ParametersCollection {
    /// <summary>
    /// Safely add a default parameter to the collection.
    /// </summary>
    /// <param name="parameter">Parameter to add</param>
    /// <returns></returns>
    /// <exception cref="NotSupportedException"></exception>
    /// <exception cref="ArgumentException"></exception>
    [MethodImpl(MethodImplOptions.Synchronized)]
    public DefaultParameters AddParameter(Parameter parameter) {
        if (parameter.Type == ParameterType.RequestBody)
            throw new NotSupportedException("Cannot set request body using default parameters. Use Request.AddBody() instead.");

        if (!options.AllowMultipleDefaultParametersWithSameName &&
            parameter.Type != ParameterType.HttpHeader &&
            !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;
    }

    /// <summary>
    /// Safely removes all the default parameters with the given name and type.
    /// </summary>
    /// <param name="name">Parameter name</param>
    /// <param name="type">Parameter type</param>
    /// <returns></returns>
    [PublicAPI]
    [MethodImpl(MethodImplOptions.Synchronized)]
    public DefaultParameters RemoveParameter(string name, ParameterType type) {
        Parameters.RemoveAll(x => x.Name == name && x.Type == type);

View on GitHub (pinned to 6a50821692)

Solutions

  1. Call client.RemoveParameter(name, type) before re-adding, or use AddOrUpdateDefaultParameter if available.
  2. Set RestClientOptions.AllowMultipleDefaultParametersWithSameName = true if duplicates are genuinely intended.
  3. Deduplicate the source dictionary before adding default parameters.

Example fix

// before
foreach (var kvp in dict)
    client.AddDefaultQueryParameter(kvp.Key, kvp.Value); // throws on duplicate key

// after
foreach (var g in dict.GroupBy(x => x.Key))
    client.AddOrUpdateDefaultQueryParameter(g.Key, g.Last().Value);
Defensive patterns

Strategy: validation

Validate before calling

if (!options.AllowMultipleDefaultParametersWithSameName && defaults.Any(p => p.Name == name)) throw new ArgumentException("Duplicate default parameter name");

Try / catch

try { client.AddDefaultQueryParameter(name, value); } catch (ArgumentException ex) when (ex.Message.Contains("same name has already been added")) { /* use AddOrUpdate or remove first */ }

Prevention

When it happens

Trigger: Calling client.AddDefaultQueryParameter / AddDefaultUrlSegment / AddDefaultCookie (or AddParameter) twice with the same name while AllowMultipleDefaultParametersWithSameName is false.

Common situations: Looping over a dictionary and adding default query parameters without deduplication; re-registering a default segment after config change; framework re-initialization calling AddDefaultParameter twice.

Related errors


AI-assisted analysis of restsharp/RestSharp@6a50821692 (2026-08-13). Data as JSON: /api/errors/81efd0dd7ebe7db3. Report an issue: GitHub.