diff --git a/dotnet/src/dotnetframework/GxClasses/Domain/GxHttpClient.cs b/dotnet/src/dotnetframework/GxClasses/Domain/GxHttpClient.cs index 9f72aa3d5..4f3ea23a9 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,10 @@ void setHeaders(HttpRequestMessage request, CookieContainer cookies) } InferContentType(contentType, request); } + void AddHeader(HttpRequestHeaders headers, string headerName, string headerValue) + { + headers.TryAddWithoutValidation(headerName, headerValue); + } 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..a03f17559 --- /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 AddHeaderWithSpecialCharactersDoesNotThrowException() + { + 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); + + } + } +}