{"record":{"id":"071600d8667a3e95","repo":"restsharp/RestSharp","slug":"advancedresponsewriter-is-not-null-only-one-respo","errorCode":null,"errorMessage":"AdvancedResponseWriter is not null. Only one response writer can be used.","messagePattern":"AdvancedResponseWriter is not null\\. Only one response writer can be used\\.","errorType":"exception","errorClass":"ArgumentException","httpStatus":null,"severity":"error","filePath":"src/RestSharp/Request/RestRequest.cs","lineNumber":223,"sourceCode":"\n    /// <summary>\n    /// Completion option for <seealso cref=\"HttpClient\"/>\n    /// </summary>\n    public HttpCompletionOption CompletionOption { get; set; } = HttpCompletionOption.ResponseContentRead;\n\n    /// <summary>\n    /// Cache policy to be used for requests using <seealso cref=\"CacheControlHeaderValue\"/>\n    /// </summary>\n    public CacheControlHeaderValue? CachePolicy { get; set; }\n\n    /// <summary>\n    /// Set this to write response to Stream rather than reading into memory.\n    /// </summary>\n    public Func<Stream, Stream?>? ResponseWriter {\n        get;\n        set {\n            if (AdvancedResponseWriter != null) {\n                throw new ArgumentException(\"AdvancedResponseWriter is not null. Only one response writer can be used.\");\n            }\n\n            field = value;\n        }\n    }\n\n    /// <summary>\n    /// Set this to handle the response stream yourself, based on the response details\n    /// </summary>\n    public Func<HttpResponseMessage, RestRequest, RestResponse>? AdvancedResponseWriter {\n        get;\n        set {\n            if (ResponseWriter != null) {\n                throw new ArgumentException(\"ResponseWriter is not null. Only one response writer can be used.\");\n            }\n\n            field = value;\n        }","sourceCodeStart":205,"sourceCodeEnd":241,"githubUrl":"https://github.com/restsharp/RestSharp/blob/6a5082169257438cd085f822f050d93256a8e499/src/RestSharp/Request/RestRequest.cs#L205-L241","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","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."],"exampleFix":"// before\nrequest.AdvancedResponseWriter = AdvancedHandler;\nrequest.ResponseWriter       = SimpleWriter; // throws\n\n// after\n// use only one:\nrequest.ResponseWriter = SimpleWriter;","handlingStrategy":"validation","validationCode":"if (request.AdvancedResponseWriter is null)\n    request.ResponseWriter = SimpleWriter;\nelse\n    throw new InvalidOperationException(\"AdvancedResponseWriter already set; cannot set ResponseWriter\");","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Pick exactly one response writer per request.","Centralize writer assignment to avoid scattered conflicting sets.","When reusing RestRequest instances, null out the unused writer."],"tags":["request","response-writer","configuration","argument","mutual-exclusion"],"backgroundTag":null,"analyzedSha":"6a5082169257438cd085f822f050d93256a8e499","analyzedAt":"2026-08-13T20:38:25.807Z","schemaVersion":2},"datasetVersion":"2026-08-14T00:17:13.853Z"}