restsharp/RestSharp · error · ArgumentException

AdvancedResponseWriter is not null. Only one response writer

Error message

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

What it means

RestRequest exposes two mutually exclusive response writer hooks: ResponseWriter (stream-based) and AdvancedResponseWriter (HttpResponseMessage-based). The ResponseWriter setter throws ArgumentException if AdvancedResponseWriter has already been assigned, because only one writer can govern how the response is consumed.

Source

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

    /// <summary>
    /// Completion option for <seealso cref="HttpClient"/>
    /// </summary>
    public HttpCompletionOption CompletionOption { get; set; } = HttpCompletionOption.ResponseContentRead;

    /// <summary>
    /// Cache policy to be used for requests using <seealso cref="CacheControlHeaderValue"/>
    /// </summary>
    public CacheControlHeaderValue? CachePolicy { get; set; }

    /// <summary>
    /// Set this to write response to Stream rather than reading into memory.
    /// </summary>
    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;
        }

View on GitHub (pinned to 6a50821692)

Solutions

  1. Choose exactly one response writer per request and never assign the other.
  2. Before assigning ResponseWriter, ensure AdvancedResponseWriter is null (reset it if reusing a RestRequest instance).
  3. If you need the advanced behavior, use AdvancedResponseWriter exclusively and drop ResponseWriter.

Example fix

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

// after
// use only one:
request.ResponseWriter = SimpleWriter;
Defensive patterns

Strategy: validation

Validate before calling

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

Prevention

When it happens

Trigger: Assigning request.ResponseWriter after request.AdvancedResponseWriter has been set (including to a non-null value earlier in request building). The setter guard fires immediately on assignment.

Common situations: Copy-pasting code samples that set both writers; refactoring that leaves a previous AdvancedResponseWriter assignment in place; fluent builders that conditionally set writers without clearing the other.

Related errors


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