Skip to content

Commit d68993c

Browse files
author
a.golmahaleh
committed
encode query string uri
1 parent b1a58aa commit d68993c

File tree

4 files changed

+69
-20
lines changed

4 files changed

+69
-20
lines changed

src/HttpClientToCurl/Builder.cs

Lines changed: 58 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -22,38 +22,82 @@ internal static StringBuilder Initialize(HttpMethod httpMethod)
2222
return stringBuilder.Append(' ');
2323
}
2424

25-
internal static StringBuilder AddAbsoluteUrl(this StringBuilder stringBuilder, string inputBaseAddress, Uri inputRequestUri)
25+
internal static StringBuilder AddAbsoluteUrl(this StringBuilder stringBuilder, string inputBaseAddress,
26+
Uri inputRequestUri)
2627
{
27-
string requestUri;
28+
string address;
2829
Uri baseAddressUri = Helpers.CreateUri(inputBaseAddress);
2930
bool baseAddressIsAbsoluteUri = Helpers.CheckAddressIsAbsoluteUri(baseAddressUri);
3031
bool requestUriIsAbsoluteUri = Helpers.CheckAddressIsAbsoluteUri(inputRequestUri);
3132

3233
if (inputRequestUri is null && baseAddressUri is not null && baseAddressIsAbsoluteUri)
33-
requestUri = baseAddressUri.ToString();
34+
address = baseAddressUri.ToString();
3435
else if (baseAddressUri is null && inputRequestUri is not null && requestUriIsAbsoluteUri)
35-
requestUri = inputRequestUri.ToString();
36-
else if (baseAddressUri is not null && inputRequestUri is not null && baseAddressIsAbsoluteUri && !requestUriIsAbsoluteUri)
37-
requestUri = new Uri(baseAddressUri, inputRequestUri).ToString();
36+
address = inputRequestUri.ToString();
37+
else if (baseAddressUri is not null && inputRequestUri is not null && baseAddressIsAbsoluteUri &&
38+
!requestUriIsAbsoluteUri)
39+
address = new Uri(baseAddressUri, inputRequestUri).ToString();
3840
else if (baseAddressUri is not null && inputRequestUri is not null && baseAddressIsAbsoluteUri)
39-
requestUri = inputRequestUri.ToString();
41+
address = inputRequestUri.ToString();
4042
else if (baseAddressUri is null && inputRequestUri is null)
41-
requestUri = null;
43+
address = null;
4244
else
43-
requestUri = $"{baseAddressUri}{inputRequestUri}";
45+
address = $"{baseAddressUri}{inputRequestUri}";
46+
47+
var encodedAddress = ApplyEncodeUri(address);
4448

4549
return stringBuilder
46-
.Append($"{requestUri}")
50+
.Append($"{encodedAddress ?? address}")
4751
.Append(' ');
4852
}
4953

50-
internal static StringBuilder AddHeaders(this StringBuilder stringBuilder, HttpClient httpClient, HttpRequestMessage httpRequestMessage, bool needAddDefaultHeaders = true)
54+
private static string ApplyEncodeUri(string address)
55+
{
56+
string result = null;
57+
58+
if (address is not null)
59+
{
60+
var questionMarkItems = address.Split('?');
61+
if (questionMarkItems.Length > 1)
62+
{
63+
var andItems = questionMarkItems[1].Split('&');
64+
if (andItems.Length > 1)
65+
{
66+
var addressEncodedStringBuilder = new StringBuilder()
67+
.Append(questionMarkItems[0])
68+
.Append('?');
69+
foreach (var ai in andItems)
70+
{
71+
var equalItems = ai.Split('=');
72+
if (equalItems.Length > 1)
73+
{
74+
addressEncodedStringBuilder
75+
.Append(equalItems[0])
76+
.Append('=')
77+
.Append(Uri.EscapeDataString(equalItems[1]))
78+
.Append('&');
79+
}
80+
}
81+
82+
result = addressEncodedStringBuilder
83+
.Remove(addressEncodedStringBuilder.Length - 1, 1)
84+
.ToString();
85+
}
86+
}
87+
}
88+
89+
return result;
90+
}
91+
92+
internal static StringBuilder AddHeaders(this StringBuilder stringBuilder, HttpClient httpClient,
93+
HttpRequestMessage httpRequestMessage, bool needAddDefaultHeaders = true)
5194
{
5295
bool hasHeader = false;
5396

5497
if (needAddDefaultHeaders && httpClient.DefaultRequestHeaders.Any())
5598
{
56-
var defaultHeaders = httpClient.DefaultRequestHeaders.Where(dh => dh.Key != HttpRequestHeader.ContentLength.ToString());
99+
var defaultHeaders =
100+
httpClient.DefaultRequestHeaders.Where(dh => dh.Key != HttpRequestHeader.ContentLength.ToString());
57101
foreach (var header in defaultHeaders)
58102
{
59103
stringBuilder
@@ -83,7 +127,8 @@ internal static StringBuilder AddHeaders(this StringBuilder stringBuilder, HttpC
83127

84128
if (httpRequestMessage.Content is not null && httpRequestMessage.Content.Headers.Any())
85129
{
86-
foreach (var header in httpRequestMessage.Content.Headers.Where(h => h.Key != HttpRequestHeader.ContentLength.ToString()))
130+
foreach (var header in httpRequestMessage.Content.Headers.Where(h =>
131+
h.Key != HttpRequestHeader.ContentLength.ToString()))
87132
{
88133
stringBuilder
89134
.Append("-H")

src/HttpClientToCurl/HttpClientToCurl.csproj

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
4-
<Authors>Amin Golmahalle</Authors>
5-
<Version>2.0.1</Version>
6-
<PackageReleaseNotes>2.0.1</PackageReleaseNotes>
4+
<Authors>Amin Golmahalleh</Authors>
5+
<Version>2.0.2</Version>
6+
<PackageReleaseNotes>2.0.2</PackageReleaseNotes>
77
<TargetFramework>netstandard2.1</TargetFramework>
88
<ImplicitUsings>enable</ImplicitUsings>
99
<Nullable>disable</Nullable>

src/HttpClientToCurl/Utility/Helpers.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ internal static bool CheckAddressIsAbsoluteUri(Uri baseAddress)
7272
isValidAbsoluteAddress = false;
7373
else if (!baseAddress.IsAbsoluteUri)
7474
isValidAbsoluteAddress = false;
75-
else if (!Helpers.IsHttpUri(baseAddress))
75+
else if (!IsHttpUri(baseAddress))
7676
isValidAbsoluteAddress = false;
7777

7878
return isValidAbsoluteAddress;

src/HttpClientToCurlGeneratorTest/UnitTest/MediaTypes/Json/SuccessCurlGeneratorTests.cs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,9 @@ public void GenerateCurl_With_QueryString_For_PostMethod()
7474

7575
var queryString = new Dictionary<string, string>()
7676
{
77-
{ "id", "12" }
77+
{ "id", "12" },
78+
{ "name", "Morten Sjøgren" },
79+
{ "nationalCode", "123-456-7890" }
7880
};
7981
var requestUri = QueryHelpers.AddQueryString("api/test", queryString);
8082
var httpRequestMessage = new HttpRequestMessage(HttpMethod.Post, requestUri);
@@ -96,7 +98,7 @@ public void GenerateCurl_With_QueryString_For_PostMethod()
9698
script.Should().StartWith("curl -X POST");
9799
script.Trim().Should()
98100
.BeEquivalentTo(
99-
@"curl -X POST http://localhost:1213/v1/api/test?id=12 -H 'Authorization: Bearer 4797c126-3f8a-454a-aff1-96c0220dae61' -H 'Content-Type: application/json; charset=utf-8' -d '{""name"":""amin"",""requestId"":10001000,""amount"":10000}'");
101+
@"curl -X POST http://localhost:1213/v1/api/test?id=12&name=Morten%20Sj%C3%B8gren&nationalCode=123-456-7890 -H 'Authorization: Bearer 4797c126-3f8a-454a-aff1-96c0220dae61' -H 'Content-Type: application/json; charset=utf-8' -d '{""name"":""amin"",""requestId"":10001000,""amount"":10000}'");
100102
}
101103

102104
[Theory]
@@ -179,7 +181,9 @@ public void GenerateCurl_Without_Content_For_PostMethod()
179181
// Assert
180182
script.Should().NotBeNullOrEmpty();
181183
script.Should().StartWith("curl -X POST");
182-
script.Trim().Should().BeEquivalentTo(@"curl -X POST http://localhost:1213/v1/api/test -H 'Authorization: Bearer 56bfa7a0-0541-4d71-9efc-8b28219ac31a' -d ''");
184+
script.Trim().Should()
185+
.BeEquivalentTo(
186+
@"curl -X POST http://localhost:1213/v1/api/test -H 'Authorization: Bearer 56bfa7a0-0541-4d71-9efc-8b28219ac31a' -d ''");
183187
}
184188

185189
[Theory]

0 commit comments

Comments
 (0)