From 839db9145c8125230e6c53c4aa4382616ef92655 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Taco=20=28=E3=82=BF=E3=82=B3=E3=82=B9=29?= <65432314+tacosontitan@users.noreply.github.com> Date: Mon, 20 Feb 2023 15:45:25 -0600 Subject: [PATCH 1/2] Added product version to the user-agent check when configuring HttpClient. --- src/RestSharp/RestClient.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/RestSharp/RestClient.cs b/src/RestSharp/RestClient.cs index 7202c4fa0..e34fc563d 100644 --- a/src/RestSharp/RestClient.cs +++ b/src/RestSharp/RestClient.cs @@ -128,7 +128,7 @@ public RestClient(HttpMessageHandler handler, bool disposeHandler = true) : this void ConfigureHttpClient(HttpClient httpClient) { if (Options.MaxTimeout > 0) httpClient.Timeout = TimeSpan.FromMilliseconds(Options.MaxTimeout); - if (Options.UserAgent != null && httpClient.DefaultRequestHeaders.UserAgent.All(x => x.Product?.Name != Options.UserAgent)) { + if (Options.UserAgent != null && httpClient.DefaultRequestHeaders.UserAgent.All(x => $"{x.Product?.Name}/{x.Product?.Version}" != Options.UserAgent)) { httpClient.DefaultRequestHeaders.TryAddWithoutValidation("User-Agent", Options.UserAgent); } From 54483d2809b9be6a35646df7fc4b0ff3daf944f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Taco=20=28=E3=82=BF=E3=82=B3=E3=82=B9=29?= <65432314+tacosontitan@users.noreply.github.com> Date: Mon, 20 Feb 2023 15:45:48 -0600 Subject: [PATCH 2/2] Created a unit test to handle duplicate user agent scenario. --- test/RestSharp.Tests/RestClientTests.cs | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/test/RestSharp.Tests/RestClientTests.cs b/test/RestSharp.Tests/RestClientTests.cs index 7d7a675c2..42986a72a 100644 --- a/test/RestSharp.Tests/RestClientTests.cs +++ b/test/RestSharp.Tests/RestClientTests.cs @@ -102,4 +102,19 @@ public void UseOnlySerializer_leaves_only_custom_serializer() { Assert.Single(client.Serializers); Assert.True(client.Serializers.ContainsKey(DataFormat.Json)); } + + [Fact] + public void ConfigureHttpClient_does_not_duplicate_user_agent_for_same_client() { + // arrange + var httpClient = new HttpClient(); + var clientOptions = new RestClientOptions(); + + // act + var restClient1 = new RestClient(httpClient, clientOptions); + var restClient2 = new RestClient(httpClient, clientOptions); + + // assert + Assert.Contains(httpClient.DefaultRequestHeaders.UserAgent, agent => $"{agent.Product.Name}/{agent.Product.Version}" == clientOptions.UserAgent); + Assert.Single(httpClient.DefaultRequestHeaders.UserAgent); + } } \ No newline at end of file