Skip to content

Commit f18501c

Browse files
alexeyzimarevclaude
andcommitted
Fix default parameters missing from RestResponse.Request.Parameters (#2282)
Merge default parameters into RestRequest.Parameters early in ExecuteRequestAsync so they are visible via response.Request.Parameters. Remove the now-redundant separate merges in RequestContent, BuildUriExtensions, RequestHeaders, and OAuth1Authenticator. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent f2b1fd1 commit f18501c

5 files changed

Lines changed: 30 additions & 8 deletions

File tree

src/RestSharp/Authenticators/OAuth/OAuth1Authenticator.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -258,7 +258,6 @@ internal static void AddOAuthData(
258258
? x => BaseQuery(x) && x.Name != null && x.Name.StartsWith("oauth_")
259259
: (Func<Parameter, bool>)BaseQuery;
260260

261-
parameters.AddRange(client.DefaultParameters.Where(query).ToWebParameters());
262261
parameters.AddRange(request.Parameters.Where(query).ToWebParameters());
263262

264263
workflow.RequestUrl = url;

src/RestSharp/BuildUriExtensions.cs

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,7 @@ public Uri BuildUriWithoutQueryParameters(RestRequest request) {
5353
var (uri, resource) = client.Options.BaseUrl.GetUrlSegmentParamsValues(
5454
request.Resource,
5555
client.Options.Encode,
56-
request.Parameters,
57-
client.DefaultParameters
56+
request.Parameters
5857
);
5958
return uri.MergeBaseUrlAndResource(resource);
6059
}
@@ -66,9 +65,7 @@ public Uri BuildUriWithoutQueryParameters(RestRequest request) {
6665
/// <returns></returns>
6766
[PublicAPI]
6867
public string? GetRequestQuery(RestRequest request) {
69-
var parametersCollections = new ParametersCollection[] { request.Parameters, client.DefaultParameters };
70-
71-
var parameters = parametersCollections.SelectMany(x => x.GetQueryParameters(request.Method)).ToList();
68+
var parameters = request.Parameters.GetQueryParameters(request.Method).ToList();
7269

7370
return parameters.Count == 0 ? null : string.Join("&", parameters.Select(EncodeParameter).ToArray());
7471

src/RestSharp/Request/RequestContent.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ namespace RestSharp;
2424

2525
class RequestContent(IRestClient client, RestRequest request) : IDisposable {
2626
readonly List<Stream> _streams = [];
27-
readonly ParametersCollection _parameters = new RequestParameters(request.Parameters.Union(client.DefaultParameters));
27+
readonly ParametersCollection _parameters = request.Parameters;
2828

2929
HttpContent? Content { get; set; }
3030

src/RestSharp/RestClient.Async.cs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,14 @@ async Task<HttpResponse> ExecuteRequestAsync(RestRequest request, CancellationTo
100100
}
101101
#endif
102102
CombineInterceptors(request);
103+
104+
// Merge default parameters into the request so they are visible in response.Request.Parameters
105+
foreach (var defaultParam in DefaultParameters) {
106+
if (!request.Parameters.Any(p => p.Name == defaultParam.Name && p.Type == defaultParam.Type)) {
107+
request.Parameters.AddParameter(defaultParam);
108+
}
109+
}
110+
103111
await OnBeforeRequest(request, cancellationToken).ConfigureAwait(false);
104112
request.ValidateParameters();
105113
var authenticator = request.Authenticator ?? Options.Authenticator;
@@ -131,7 +139,6 @@ async Task<HttpResponse> ExecuteRequestAsync(RestRequest request, CancellationTo
131139

132140
var headers = new RequestHeaders()
133141
.AddHeaders(request.Parameters)
134-
.AddHeaders(DefaultParameters)
135142
.AddAcceptHeader(AcceptedContentTypes)
136143
.AddCookieHeaders(url, cookieContainer)
137144
.AddCookieHeaders(url, Options.CookieContainer);

test/RestSharp.Tests.Integrated/HttpHeadersTests.cs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,25 @@ public async Task Should_sent_custom_UserAgent() {
6868
response.GetHeaderValue("Server").Should().Be("Kestrel");
6969
}
7070

71+
[Fact]
72+
public async Task Default_headers_should_appear_in_response_request_parameters() {
73+
const string headerName = "X-Custom-Default";
74+
const string headerValue = "DefaultValue123";
75+
76+
_client.AddDefaultHeader(headerName, headerValue);
77+
78+
var request = new RestRequest("/headers");
79+
var response = await _client.ExecuteAsync(request);
80+
81+
response.StatusCode.Should().Be(HttpStatusCode.OK);
82+
83+
var param = response.Request.Parameters
84+
.FirstOrDefault(p => p.Name == headerName && p.Type == ParameterType.HttpHeader);
85+
86+
param.Should().NotBeNull();
87+
param!.Value.Should().Be(headerValue);
88+
}
89+
7190
static void CheckHeader(RestResponse<TestServerResponse[]> response, Header header) {
7291
var h = FindHeader(response, header.Name);
7392
h.Should().NotBeNull();

0 commit comments

Comments
 (0)