コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }