restsharp/RestSharp · error · ArgumentException

ResponseWriter is not null. Only one response writer can be

Error message

ResponseWriter is not null. Only one response writer can be used.

What it means

The symmetric guard to the ResponseWriter setter: AdvancedResponseWriter's setter throws ArgumentException if ResponseWriter has already been assigned. RestSharp enforces that only one response writer mode (simple stream vs. full message) is active on a single RestRequest.

Source

Thrown at src/RestSharp/Request/RestRequest.cs:237

    public Func<Stream, Stream?>? ResponseWriter {
        get;
        set {
            if (AdvancedResponseWriter != null) {
                throw new ArgumentException("AdvancedResponseWriter is not null. Only one response writer can be used.");
            }

            field = value;
        }
    }

    /// <summary>
    /// Set this to handle the response stream yourself, based on the response details
    /// </summary>
    public Func<HttpResponseMessage, RestRequest, RestResponse>? AdvancedResponseWriter {
        get;
        set {
            if (ResponseWriter != null) {
                throw new ArgumentException("ResponseWriter is not null. Only one response writer can be used.");
            }

            field = value;
        }
    }

    /// <summary>
    /// Request-level interceptors. Will be combined with client-level interceptors if set.
    /// </summary>
    public List<Interceptor>? Interceptors { get; set; }

    /// <summary>
    /// Adds a parameter object to the request parameters
    /// </summary>
    /// <param name="parameter">Parameter to add</param>
    /// <returns></returns>
    public RestRequest AddParameter(Parameter parameter) => this.With(x => x.Parameters.AddParameter(parameter));

View on GitHub (pinned to 6a50821692)

Solutions

  1. Use only AdvancedResponseWriter when you need the full HttpResponseMessage, and leave ResponseWriter null.
  2. If a RestRequest instance is reused, null out the previously set writer before assigning the other.
  3. Centralize writer selection in one place to avoid conflicting assignments.

Example fix

// before
request.ResponseWriter       = SimpleWriter;
request.AdvancedResponseWriter = AdvancedHandler; // throws

// after
request.ResponseWriter = null;
request.AdvancedResponseWriter = AdvancedHandler;
Defensive patterns

Strategy: validation

Validate before calling

if (request.ResponseWriter is null)
    request.AdvancedResponseWriter = AdvancedHandler;
else
    throw new InvalidOperationException("ResponseWriter already set; cannot set AdvancedResponseWriter");

Prevention

When it happens

Trigger: Assigning request.AdvancedResponseWriter after request.ResponseWriter was already set to a non-null value.

Common situations: Building requests in shared/factory methods that set ResponseWriter, then a caller adds AdvancedResponseWriter; migrating from the simple writer to the advanced one without clearing the former.

Related errors


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