Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
55 changes: 45 additions & 10 deletions dotnet/src/dotnetframework/GxClasses/Domain/GxHttpClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -356,12 +356,25 @@ void buildUrl()
sHost = sHost.Substring(0, sHost.Length - 1);
}
sBaseUrl = _baseUrl;
if (!string.IsNullOrEmpty(sBaseUrl) && sBaseUrl.StartsWith("/"))
sBaseUrl = sBaseUrl.Substring(1, sBaseUrl.Length - 1);
_url = _scheme + sHost + sPort + "/" + sBaseUrl;
if (IsAbsolute(sBaseUrl))
{
_url = sBaseUrl;
}
else
{
if (!string.IsNullOrEmpty(sBaseUrl) && sBaseUrl.StartsWith("/"))
sBaseUrl = sBaseUrl.Substring(1, sBaseUrl.Length - 1);

_url = _scheme + sHost + sPort + "/" + sBaseUrl;
}
if (_url.EndsWith("/"))
_url = _url.Substring(0, _url.Length - 1);
}
bool IsAbsolute(string url)
{
return Uri.IsWellFormedUriString(url, UriKind.Absolute);
}

public void ClearHeaders()
{
_headers.Clear();
Expand Down Expand Up @@ -744,10 +757,17 @@ bool UseOldHttpClient(string name)
return true;

#if !NETCORE
string requestUrl = GetRequestURL(name);
Uri uri = new Uri(requestUrl);
if (!uri.IsDefaultPort)
return true;
try
{
string requestUrl = GetRequestURL(name);
Uri uri = new Uri(requestUrl);
if (!uri.IsDefaultPort)
return true;
}
catch (Exception e)
{
GXLogging.Warn(log, "UseOldHttpClient", e);
}
#endif
return false;
}
Expand All @@ -756,6 +776,7 @@ public void Execute(string method, string name)
{
if (UseOldHttpClient(name))
{
GXLogging.Debug(log, "Using legacy GxHttpClient");
WebExecute(method, name);
}
else
Expand Down Expand Up @@ -1019,10 +1040,17 @@ public string GetRequestURL(string name)
return name;
else
{
if (!string.IsNullOrEmpty(name) && name.IndexOf('/') == 0)
return _url + name;
if (IsAbsolute(name))
{
return name;
}
else
return _url + "/" + name;
{
if (!string.IsNullOrEmpty(name) && name.IndexOf('/') == 0)
return _url + name;
else
return _url + "/" + name;
}
}
}
#if !NETCORE
Expand Down Expand Up @@ -1188,6 +1216,13 @@ private void WebExecute(string method, string name)
}
}
#endif
catch (Exception e)
{
GXLogging.Warn(log, "Error Execute", e);
_errCode = 1;
_errDescription = e.Message;
}


_receiveData = Array.Empty<byte>();
if (resp != null)
Expand Down
42 changes: 42 additions & 0 deletions dotnet/test/DotNetCoreUnitTest/HttpClient/StreamHandling.cs
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,50 @@ public void CreateHttpClient()

Assert.True(client.ToString().Length > 0);
}
}
[Fact]
public void HttpClientAbsoluteURLOnExecute()
{
using (GxHttpClient client = new GxHttpClient())
{
string url = "https://www.google.com/";
client.Port = 80;
client.Execute("GET", url);
string requestUrl = client.GetRequestURL(url);
Assert.Equal(client.StatusCode, (short)System.Net.HttpStatusCode.OK);
Assert.True(Uri.IsWellFormedUriString(requestUrl, UriKind.Absolute), "GetRequestURL is an invalid url which will cause Invalid URI at execute");

}
}
[Fact]
public void HttpClientRelativeURLOnExecute_1()
{
using (GxHttpClient client = new GxHttpClient())
{
string url = "imghp";
client.Port = 80;
client.BaseURL = "https://www.google.com/";
client.Execute("GET", url);
string requestUrl = client.GetRequestURL(url);
Assert.Equal(client.StatusCode, (short)System.Net.HttpStatusCode.OK);
Assert.True(Uri.IsWellFormedUriString(requestUrl, UriKind.Absolute), "GetRequestURL is an invalid url which will cause Invalid URI at execute");

}
}
[Fact]
public void HttpClientRelativeURLOnExecute_2()
{
using (GxHttpClient client = new GxHttpClient())
{
string url = "/imghp";
client.Port = 80;
client.BaseURL = "https://www.google.com";
client.Execute("GET", url);
string requestUrl = client.GetRequestURL(url);
Assert.Equal(client.StatusCode, (short)System.Net.HttpStatusCode.OK);
Assert.True(Uri.IsWellFormedUriString(requestUrl, UriKind.Absolute), "GetRequestURL is an invalid url which will cause Invalid URI at execute");

}
}
}
}