public static List <ManageCompany> GetCompanies(Config config, string filterUrl) { var client = new RestClient(config.ManageUrl); if (filterUrl == null) { filterUrl = "company/companies?pageSize=1000&page=1"; } client.Authenticator = new HttpBasicAuthenticator(config.ManageCompanyName + "+" + config.ManagePubKey, config.ManagePriKey); var request = new RestRequest($"/V4_6_release/apis/3.0/{filterUrl}", DataFormat.Json); request.AddHeader("Accept", "application/vnd.connectwise.com+json; version=3.0.0; application/json"); request.AddHeader("clientid", config.ManageClientId); var response = client.Get(request); List <ManageCompany> manageCompanies = new List <ManageCompany>(); var link = response.Headers.ToList() .Find(x => x.Name == "Link") .Value.ToString(); string nextUrl; if (link == "") { nextUrl = null; } else { nextUrl = LinkHeader.LinksFromHeader(link).NextLink; } manageCompanies.AddRange(JsonConvert.DeserializeObject <List <ManageCompany> >(response.Content)); while (nextUrl != null) { var nextRequest = new RestRequest(nextUrl); nextRequest.AddHeader("Accept", "application/vnd.connectwise.com+json; version=3.0.0; application/json"); nextRequest.AddHeader("clientid", config.ManageClientId); var nextResponse = client.Get(nextRequest); manageCompanies.AddRange(JsonConvert.DeserializeObject <List <ManageCompany> >(nextResponse.Content)); var nextLink = nextResponse.Headers.ToList() .Find(x => x.Name == "Link") .Value.ToString(); nextUrl = LinkHeader.LinksFromHeader(nextLink).NextLink; } return(manageCompanies); }
public static LinkHeader LinksFromHeader(string linkHeaderStr) { LinkHeader linkHeader = null; if (!string.IsNullOrWhiteSpace(linkHeaderStr)) { string[] linkStrings = linkHeaderStr.Split(','); if (linkStrings != null && linkStrings.Any()) { linkHeader = new LinkHeader(); foreach (string linkString in linkStrings) { var relMatch = Regex.Match(linkString, "(?<=rel=\").+?(?=\")", RegexOptions.IgnoreCase); var linkMatch = Regex.Match(linkString, "(?<=<).+?(?=>)", RegexOptions.IgnoreCase); if (relMatch.Success && linkMatch.Success) { string rel = relMatch.Value.ToUpper(); string link = linkMatch.Value; switch (rel) { case "FIRST": linkHeader.FirstLink = link; break; case "PREV": linkHeader.PrevLink = link; break; case "NEXT": linkHeader.NextLink = link; break; case "LAST": linkHeader.LastLink = link; break; } } } } } return(linkHeader); }