Skip to content

Commit 420ae01

Browse files
Compatibility fix: Dot not validate headers on new HttpClient implementation (#608)
* Compatibility fix: Dot not validate headers on new HttpClient implementation. * The fix is valid for .NET (core) also. (cherry picked from commit 28cf738)
1 parent c4413cb commit 420ae01

File tree

3 files changed

+35
-4
lines changed

3 files changed

+35
-4
lines changed

dotnet/src/dotnetframework/GxClasses/Domain/GxHttpClient.cs

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -523,7 +523,7 @@ void setHeaders(HttpRequestMessage request, CookieContainer cookies)
523523
contentHeaders.ContentType = MediaTypeHeaderValue.Parse(_headers[i].ToString());
524524
break;
525525
case "ACCEPT":
526-
headers.Add("Accept", _headers[i]);
526+
AddHeader(headers, "Accept", _headers[i]);
527527
break;
528528
case "EXPECT":
529529
if (string.IsNullOrEmpty(_headers[i]))
@@ -535,7 +535,7 @@ void setHeaders(HttpRequestMessage request, CookieContainer cookies)
535535
headers.Referrer = new Uri(_headers[i]);
536536
break;
537537
case "USER-AGENT":
538-
headers.Add("User-Agent", _headers[i]);
538+
AddHeader(headers, "User-Agent", _headers[i]);
539539
break;
540540
case "DATE":
541541
DateTime value;
@@ -545,7 +545,7 @@ void setHeaders(HttpRequestMessage request, CookieContainer cookies)
545545
}
546546
else
547547
{
548-
headers.Add(currHeader, _headers[i]);
548+
AddHeader(headers, currHeader, _headers[i]);
549549
}
550550
break;
551551
case "COOKIE":
@@ -564,7 +564,7 @@ void setHeaders(HttpRequestMessage request, CookieContainer cookies)
564564
request.Headers.IfModifiedSince = dt;
565565
break;
566566
default:
567-
headers.Add(currHeader, _headers[i]);
567+
AddHeader(headers, currHeader, _headers[i]);
568568
break;
569569
}
570570
}
@@ -578,6 +578,10 @@ void setHeaders(HttpRequestMessage request, CookieContainer cookies)
578578
}
579579
InferContentType(contentType, request);
580580
}
581+
void AddHeader(HttpRequestHeaders headers, string headerName, string headerValue)
582+
{
583+
headers.TryAddWithoutValidation(headerName, headerValue);
584+
}
581585
void InferContentType(string contentType, HttpRequestMessage req)
582586
{
583587
if (string.IsNullOrEmpty(contentType) && _formVars.Count > 0)

dotnet/test/DotNetCoreUnitTest/DotNetCoreUnitTest.csproj

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
</PropertyGroup>
1313
<ItemGroup>
1414
<Compile Include="..\DotNetUnitTest\ConfigMappings\ConfigTest.cs" Link="ConfigMappings\ConfigTest.cs" />
15+
<Compile Include="..\DotNetUnitTest\Domain\GxHttpClientTest.cs" Link="Domain\GxHttpClientTest.cs" />
1516
<Compile Include="..\DotNetUnitTest\FileIO\DfrgFunctions.cs" Link="FileIO\DfrgFunctions.cs" />
1617
<Compile Include="..\DotNetUnitTest\FileIO\FileSystemTest.cs" Link="FileIO\FileSystemTest.cs" />
1718
<Compile Include="..\DotNetUnitTest\FileIO\Xslt.cs" Link="FileIO\Xslt.cs" />
@@ -153,6 +154,7 @@
153154
<ItemGroup>
154155
<Folder Include="apps\" />
155156
<Folder Include="ConfigMappings\" />
157+
<Folder Include="Domain\" />
156158
<Folder Include="PDF\" />
157159
<Folder Include="resources\xml\" />
158160
</ItemGroup>
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
using System.Net;
2+
using GeneXus.Http.Client;
3+
using Xunit;
4+
5+
namespace xUnitTesting
6+
{
7+
8+
public class GxHttpClientTest
9+
{
10+
[Fact]
11+
public void AddHeaderWithSpecialCharactersDoesNotThrowException()
12+
{
13+
GxHttpClient httpclient = new GxHttpClient();
14+
string headerValue = "d3890093-289b-4f87-adad-f2ebea826e8f!8db3bc7ac3d38933c3b0c91a3bcdab60b9bbb3f607a1c9b312b24374e750243f3a31d7e90a4c55@SSORT!d3890093-289b-4f87-adad-f2ebea826e8f!8c7564ac08514ff988ba6c8c6ba3fc0c";
15+
string headerName = "Authorization";
16+
httpclient.AddHeader(headerName, headerValue);
17+
httpclient.Host="accountstest.genexus.com";
18+
httpclient.Secure=1;
19+
httpclient.BaseURL =@"oauth/gam/v2.0/dummy/requesttokenanduserinfo";
20+
httpclient.Execute("GET", string.Empty);
21+
Assert.NotEqual(((int)HttpStatusCode.InternalServerError), httpclient.StatusCode);
22+
23+
}
24+
}
25+
}

0 commit comments

Comments
 (0)