diff --git a/src/RestSharp/Request/RestRequestExtensions.Url.cs b/src/RestSharp/Request/RestRequestExtensions.Url.cs
index ff7d4e829..499c629df 100644
--- a/src/RestSharp/Request/RestRequestExtensions.Url.cs
+++ b/src/RestSharp/Request/RestRequestExtensions.Url.cs
@@ -26,7 +26,7 @@ public static partial class RestRequestExtensions {
/// Encode the value or not, default true
///
public RestRequest AddUrlSegment(string name, string? value, bool encode = true)
- => request.AddParameter(new UrlSegmentParameter(name, value, encode));
+ => request.AddOrUpdateParameter(new UrlSegmentParameter(name, value, encode));
///
/// Adds a URL segment parameter to the request. The resource URL must have a placeholder for the parameter for it to work.
diff --git a/test/RestSharp.Tests/Parameters/UrlSegmentTests.cs b/test/RestSharp.Tests/Parameters/UrlSegmentTests.cs
index 063a1f92a..5282dc57c 100644
--- a/test/RestSharp.Tests/Parameters/UrlSegmentTests.cs
+++ b/test/RestSharp.Tests/Parameters/UrlSegmentTests.cs
@@ -54,7 +54,7 @@ public void UrlSegmentParameter_WithValueWithEncodedSlash_WillReplaceEncodedSlas
var urlSegmentParameter = new UrlSegmentParameter("foo", inputValue);
urlSegmentParameter.Value.Should().BeEquivalentTo("bar/BAR");
}
-
+
[Theory]
[InlineData("bar%2fBAR")]
[InlineData("bar%2FBAR")]
@@ -62,7 +62,7 @@ public void UrlSegmentParameter_WithValueWithEncodedSlash_CanReplaceEncodedSlash
var urlSegmentParameter = new UrlSegmentParameter("foo", inputValue, replaceEncodedSlash: true);
urlSegmentParameter.Value.Should().BeEquivalentTo("bar/BAR");
}
-
+
[Theory]
[InlineData("bar%2fBAR")]
[InlineData("bar%2FBAR")]
@@ -70,4 +70,17 @@ public void UrlSegmentParameter_WithValueWithEncodedSlash_CanLeaveEncodedSlash(s
var urlSegmentParameter = new UrlSegmentParameter("foo", inputValue, replaceEncodedSlash: false);
urlSegmentParameter.Value.Should().BeEquivalentTo(inputValue);
}
+
+ [Fact]
+ public void AddSameUrlSegmentTwice_ShouldReplaceFirst() {
+ var client = new RestClient();
+ var request = new RestRequest("https://api.example.com/orgs/{segment}/something");
+ request.AddUrlSegment("segment", 1);
+ var url1 = client.BuildUri(request);
+ request.AddUrlSegment("segment", 2);
+ var url2 = client.BuildUri(request);
+
+ url1.AbsolutePath.Should().Be("/orgs/1/something");
+ url2.AbsolutePath.Should().Be("/orgs/2/something");
+ }
}
\ No newline at end of file
diff --git a/test/RestSharp.Tests/UrlBuilderTests.Get.cs b/test/RestSharp.Tests/UrlBuilderTests.Get.cs
index f6b2c4d58..85c04b35e 100644
--- a/test/RestSharp.Tests/UrlBuilderTests.Get.cs
+++ b/test/RestSharp.Tests/UrlBuilderTests.Get.cs
@@ -198,4 +198,30 @@ public void GET_wth_trailing_slash_and_query_parameters() {
var output = client.BuildUri(request);
Assert.Equal(expected, output);
}
+
+ [Fact]
+ public void Multiple_query_parameters_with_same_name() {
+ var request = new RestRequest($"/{Resource}/")
+ .AddQueryParameter("foo", "bar")
+ .AddQueryParameter("foo", "baz");
+ var expected = new Uri($"{Base}/{Resource}/?foo=bar&foo=baz");
+
+ using var client = new RestClient(Base);
+
+ var output = client.BuildUri(request);
+ Assert.Equal(expected, output);
+ }
+
+ [Fact]
+ public void Query_parameter_with_non_string_value() {
+ var request = new RestRequest($"/{Resource}/")
+ .AddQueryParameter("foo", 123)
+ .AddQueryParameter("bar", true);
+ var expected = new Uri($"{Base}/{Resource}/?foo=123&bar=True");
+
+ using var client = new RestClient(Base);
+
+ var output = client.BuildUri(request);
+ Assert.Equal(expected, output);
+ }
}
\ No newline at end of file