From 444ff6dfb5a242b4e3e2103dcd44aa6d21d6aa74 Mon Sep 17 00:00:00 2001 From: Claudia Murialdo Date: Thu, 9 Jun 2022 11:17:02 -0300 Subject: [PATCH 1/2] Compatibility fix: Dot not validate headers on new HttpClient implementation. --- .../GxClasses/Domain/GxHttpClient.cs | 16 +++++++++--- .../DotNetCoreUnitTest.csproj | 2 ++ .../DotNetUnitTest/Domain/GxHttpClientTest.cs | 25 +++++++++++++++++++ 3 files changed, 39 insertions(+), 4 deletions(-) create mode 100644 dotnet/test/DotNetUnitTest/Domain/GxHttpClientTest.cs diff --git a/dotnet/src/dotnetframework/GxClasses/Domain/GxHttpClient.cs b/dotnet/src/dotnetframework/GxClasses/Domain/GxHttpClient.cs index 9f72aa3d5..6df6759d6 100644 --- a/dotnet/src/dotnetframework/GxClasses/Domain/GxHttpClient.cs +++ b/dotnet/src/dotnetframework/GxClasses/Domain/GxHttpClient.cs @@ -523,7 +523,7 @@ void setHeaders(HttpRequestMessage request, CookieContainer cookies) contentHeaders.ContentType = MediaTypeHeaderValue.Parse(_headers[i].ToString()); break; case "ACCEPT": - headers.Add("Accept", _headers[i]); + AddHeader(headers, "Accept", _headers[i]); break; case "EXPECT": if (string.IsNullOrEmpty(_headers[i])) @@ -535,7 +535,7 @@ void setHeaders(HttpRequestMessage request, CookieContainer cookies) headers.Referrer = new Uri(_headers[i]); break; case "USER-AGENT": - headers.Add("User-Agent", _headers[i]); + AddHeader(headers, "User-Agent", _headers[i]); break; case "DATE": DateTime value; @@ -545,7 +545,7 @@ void setHeaders(HttpRequestMessage request, CookieContainer cookies) } else { - headers.Add(currHeader, _headers[i]); + AddHeader(headers, currHeader, _headers[i]); } break; case "COOKIE": @@ -564,7 +564,7 @@ void setHeaders(HttpRequestMessage request, CookieContainer cookies) request.Headers.IfModifiedSince = dt; break; default: - headers.Add(currHeader, _headers[i]); + AddHeader(headers, currHeader, _headers[i]); break; } } @@ -578,6 +578,14 @@ void setHeaders(HttpRequestMessage request, CookieContainer cookies) } InferContentType(contentType, request); } + void AddHeader(HttpRequestHeaders headers, string headerName, string headerValue) + { +#if NETCORE + headers.Add(headerName, headerValue); +#else + headers.TryAddWithoutValidation(headerName, headerValue); +#endif + } void InferContentType(string contentType, HttpRequestMessage req) { if (string.IsNullOrEmpty(contentType) && _formVars.Count > 0) diff --git a/dotnet/test/DotNetCoreUnitTest/DotNetCoreUnitTest.csproj b/dotnet/test/DotNetCoreUnitTest/DotNetCoreUnitTest.csproj index 474b0decc..0008acf29 100644 --- a/dotnet/test/DotNetCoreUnitTest/DotNetCoreUnitTest.csproj +++ b/dotnet/test/DotNetCoreUnitTest/DotNetCoreUnitTest.csproj @@ -12,6 +12,7 @@ + @@ -153,6 +154,7 @@ + diff --git a/dotnet/test/DotNetUnitTest/Domain/GxHttpClientTest.cs b/dotnet/test/DotNetUnitTest/Domain/GxHttpClientTest.cs new file mode 100644 index 000000000..f4444bc23 --- /dev/null +++ b/dotnet/test/DotNetUnitTest/Domain/GxHttpClientTest.cs @@ -0,0 +1,25 @@ +using System.Net; +using GeneXus.Http.Client; +using Xunit; + +namespace xUnitTesting +{ + + public class GxHttpClientTest + { + [Fact] + public void TestHttpClientAddHeaderWithSpecialCharactersDoesNotThrowException() + { + GxHttpClient httpclient = new GxHttpClient(); + string headerValue = "d3890093-289b-4f87-adad-f2ebea826e8f!8db3bc7ac3d38933c3b0c91a3bcdab60b9bbb3f607a1c9b312b24374e750243f3a31d7e90a4c55@SSORT!d3890093-289b-4f87-adad-f2ebea826e8f!8c7564ac08514ff988ba6c8c6ba3fc0c"; + string headerName = "Authorization"; + httpclient.AddHeader(headerName, headerValue); + httpclient.Host="accountstest.genexus.com"; + httpclient.Secure=1; + httpclient.BaseURL =@"oauth/gam/v2.0/dummy/requesttokenanduserinfo"; + httpclient.Execute("GET", string.Empty); + Assert.NotEqual(((int)HttpStatusCode.InternalServerError), httpclient.StatusCode); + + } + } +} From f7f15871d7d491b966e72ad6ca9b4d5948e0e301 Mon Sep 17 00:00:00 2001 From: Claudia Murialdo Date: Thu, 9 Jun 2022 11:47:43 -0300 Subject: [PATCH 2/2] The fix is valid for .NET (core) also. --- dotnet/src/dotnetframework/GxClasses/Domain/GxHttpClient.cs | 4 ---- dotnet/test/DotNetUnitTest/Domain/GxHttpClientTest.cs | 2 +- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/dotnet/src/dotnetframework/GxClasses/Domain/GxHttpClient.cs b/dotnet/src/dotnetframework/GxClasses/Domain/GxHttpClient.cs index 6df6759d6..4f3ea23a9 100644 --- a/dotnet/src/dotnetframework/GxClasses/Domain/GxHttpClient.cs +++ b/dotnet/src/dotnetframework/GxClasses/Domain/GxHttpClient.cs @@ -580,11 +580,7 @@ void setHeaders(HttpRequestMessage request, CookieContainer cookies) } void AddHeader(HttpRequestHeaders headers, string headerName, string headerValue) { -#if NETCORE - headers.Add(headerName, headerValue); -#else headers.TryAddWithoutValidation(headerName, headerValue); -#endif } void InferContentType(string contentType, HttpRequestMessage req) { diff --git a/dotnet/test/DotNetUnitTest/Domain/GxHttpClientTest.cs b/dotnet/test/DotNetUnitTest/Domain/GxHttpClientTest.cs index f4444bc23..a03f17559 100644 --- a/dotnet/test/DotNetUnitTest/Domain/GxHttpClientTest.cs +++ b/dotnet/test/DotNetUnitTest/Domain/GxHttpClientTest.cs @@ -8,7 +8,7 @@ namespace xUnitTesting public class GxHttpClientTest { [Fact] - public void TestHttpClientAddHeaderWithSpecialCharactersDoesNotThrowException() + public void AddHeaderWithSpecialCharactersDoesNotThrowException() { GxHttpClient httpclient = new GxHttpClient(); string headerValue = "d3890093-289b-4f87-adad-f2ebea826e8f!8db3bc7ac3d38933c3b0c91a3bcdab60b9bbb3f607a1c9b312b24374e750243f3a31d7e90a4c55@SSORT!d3890093-289b-4f87-adad-f2ebea826e8f!8c7564ac08514ff988ba6c8c6ba3fc0c";