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
- Choose exactly one response writer per request and never assign the other.
- Before assigning ResponseWriter, ensure AdvancedResponseWriter is null (reset it if reusing a RestRequest instance).
- 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
- Pick exactly one response writer per request.
- Centralize writer assignment to avoid scattered conflicting sets.
- When reusing RestRequest instances, null out the unused writer.
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
- ResponseWriter is not null. Only one response writer can be
- Failed to put file as content because flag AlwaysMultipartFo
- Failed to put file as content because body parameters were a
- Failed to put file as content because POST parameters were a
- Both BaseUrl and Resource are empty
AI-assisted analysis of restsharp/RestSharp@6a50821692 (2026-08-13).
Data as JSON: /api/errors/071600d8667a3e95.
Report an issue: GitHub.