diff --git a/Jenkins.Net/Internal/Commands/ArtifactGetCommand.cs b/Jenkins.Net/Internal/Commands/ArtifactGetCommand.cs index 63aeefe..9232d80 100644 --- a/Jenkins.Net/Internal/Commands/ArtifactGetCommand.cs +++ b/Jenkins.Net/Internal/Commands/ArtifactGetCommand.cs @@ -23,7 +23,9 @@ public ArtifactGetCommand(IJenkinsContext context, string jobName, string buildN throw new ArgumentException("'filename' cannot be empty!"); var urlFilename = filename.Replace('\\', '/'); - Url = NetPath.Combine(context.BaseUrl, "job", jobName, buildNumber, "artifact", urlFilename); + var postfix = $"artifact/{urlFilename}"; + + Url = ConstructUrl(context.BaseUrl, jobName, buildNumber, postfix); UserName = context.UserName; Password = context.Password; Crumb = context.Crumb; diff --git a/Jenkins.Net/Internal/Commands/BuildGetCommand.cs b/Jenkins.Net/Internal/Commands/BuildGetCommand.cs index 124b156..adfbd23 100644 --- a/Jenkins.Net/Internal/Commands/BuildGetCommand.cs +++ b/Jenkins.Net/Internal/Commands/BuildGetCommand.cs @@ -19,7 +19,7 @@ public BuildGetCommand(IJenkinsContext context, string jobName, string buildNumb if (string.IsNullOrEmpty(buildNumber)) throw new ArgumentException("'buildNumber' cannot be empty!"); - Url = NetPath.Combine(context.BaseUrl, "job", jobName, buildNumber, "api/xml"); + Url = ConstructUrl(context.BaseUrl, jobName, buildNumber, "api/xml"); UserName = context.UserName; Password = context.Password; Crumb = context.Crumb; diff --git a/Jenkins.Net/Internal/JenkinsHttpCommand.cs b/Jenkins.Net/Internal/JenkinsHttpCommand.cs index fa0e280..dbd9133 100644 --- a/Jenkins.Net/Internal/JenkinsHttpCommand.cs +++ b/Jenkins.Net/Internal/JenkinsHttpCommand.cs @@ -6,6 +6,8 @@ using System.Text.RegularExpressions; using System.Xml; using System.Xml.Linq; +using System.Collections.Generic; + #if NET_ASYNC using System.Threading; @@ -154,5 +156,24 @@ private static string RemoveXmlDeclaration(string xml) const string pattern = @"<\?xml[^\>]*\?>"; return Regex.Replace(xml, pattern, string.Empty); } + + internal string ConstructUrl(string baseUrl, string jobName, string buildNumber,string postfix) + { + var jobParts = jobName.Split(['/'], StringSplitOptions.RemoveEmptyEntries); + var urlParts = new List { baseUrl }; + + foreach (var part in jobParts) + { + urlParts.Add("job"); + urlParts.Add(part); + } + + urlParts.Add(buildNumber); + urlParts.Add(postfix); + + return NetPath.Combine(urlParts.ToArray()); + } + + } }