/// <inheritdoc />
        public Task AddConfigurationParameterOverridesAsync(
            NodeName nodeName,
            IEnumerable <ConfigParameterOverride> configParameterOverrideList,
            bool?force         = default(bool?),
            long?serverTimeout = 60,
            CancellationToken cancellationToken = default(CancellationToken))
        {
            nodeName.ThrowIfNull(nameof(nodeName));
            configParameterOverrideList.ThrowIfNull(nameof(configParameterOverrideList));
            serverTimeout?.ThrowIfOutOfInclusiveRange("serverTimeout", 1, 4294967295);
            var requestId = Guid.NewGuid().ToString();
            var url       = "Nodes/{nodeName}/$/AddConfigurationParameterOverrides";

            url = url.Replace("{nodeName}", Uri.EscapeDataString(nodeName.ToString()));
            var queryParams = new List <string>();

            // Append to queryParams if not null.
            force?.AddToQueryParameters(queryParams, $"Force={force}");
            serverTimeout?.AddToQueryParameters(queryParams, $"timeout={serverTimeout}");
            queryParams.Add("api-version=7.0");
            url += "?" + string.Join("&", queryParams);

            string content;

            using (var sw = new StringWriter())
            {
                ListTConverter <ConfigParameterOverride> .Serialize(new JsonTextWriter(sw), configParameterOverrideList, ConfigParameterOverrideConverter.Serialize);

                content = sw.ToString();
            }

            HttpRequestMessage RequestFunc()
            {
                var request = new HttpRequestMessage()
                {
                    Method  = HttpMethod.Post,
                    Content = new StringContent(content, Encoding.UTF8),
                };

                request.Content.Headers.ContentType = System.Net.Http.Headers.MediaTypeHeaderValue.Parse("application/json; charset=utf-8");
                return(request);
            }

            return(this.httpClient.SendAsync(RequestFunc, url, requestId, cancellationToken));
        }
        /// <inheritdoc />
        public Task <PagedData <UpdatePartitionLoadResult> > UpdatePartitionLoadAsync(
            IEnumerable <PartitionMetricLoadDescription> partitionMetricLoadDescriptionList,
            ContinuationToken continuationToken = default(ContinuationToken),
            long?maxResults    = 0,
            long?serverTimeout = 60,
            CancellationToken cancellationToken = default(CancellationToken))
        {
            partitionMetricLoadDescriptionList.ThrowIfNull(nameof(partitionMetricLoadDescriptionList));
            maxResults?.ThrowIfLessThan("maxResults", 0);
            serverTimeout?.ThrowIfOutOfInclusiveRange("serverTimeout", 1, 4294967295);
            var requestId   = Guid.NewGuid().ToString();
            var url         = "$/UpdatePartitionLoad";
            var queryParams = new List <string>();

            // Append to queryParams if not null.
            continuationToken?.AddToQueryParameters(queryParams, $"ContinuationToken={continuationToken.ToString()}");
            maxResults?.AddToQueryParameters(queryParams, $"MaxResults={maxResults}");
            serverTimeout?.AddToQueryParameters(queryParams, $"timeout={serverTimeout}");
            queryParams.Add("api-version=7.2");
            url += "?" + string.Join("&", queryParams);

            string content;

            using (var sw = new StringWriter())
            {
                ListTConverter <PartitionMetricLoadDescription> .Serialize(new JsonTextWriter(sw), partitionMetricLoadDescriptionList, PartitionMetricLoadDescriptionConverter.Serialize);

                content = sw.ToString();
            }

            HttpRequestMessage RequestFunc()
            {
                var request = new HttpRequestMessage()
                {
                    Method  = HttpMethod.Post,
                    Content = new StringContent(content, Encoding.UTF8),
                };

                request.Content.Headers.ContentType = System.Net.Http.Headers.MediaTypeHeaderValue.Parse("application/json; charset=utf-8");
                return(request);
            }

            return(this.httpClient.SendAsyncGetResponseAsPagedData(RequestFunc, url, UpdatePartitionLoadResultConverter.Deserialize, requestId, cancellationToken));
        }
        /// <inheritdoc />
        public Task AddNodeTagsAsync(
            NodeName nodeName,
            IEnumerable <string> nodeTags,
            CancellationToken cancellationToken = default(CancellationToken))
        {
            nodeName.ThrowIfNull(nameof(nodeName));
            nodeTags.ThrowIfNull(nameof(nodeTags));
            var requestId = Guid.NewGuid().ToString();
            var url       = "Nodes/{nodeName}/$/AddNodeTags";

            url = url.Replace("{nodeName}", Uri.EscapeDataString(nodeName.ToString()));
            var queryParams = new List <string>();

            // Append to queryParams if not null.
            queryParams.Add("api-version=7.2");
            url += "?" + string.Join("&", queryParams);

            string content;

            using (var sw = new StringWriter())
            {
                ListTConverter <string> .Serialize(new JsonTextWriter(sw), nodeTags, StringConverter.Serialize);

                content = sw.ToString();
            }

            HttpRequestMessage RequestFunc()
            {
                var request = new HttpRequestMessage()
                {
                    Method  = HttpMethod.Post,
                    Content = new StringContent(content, Encoding.UTF8),
                };

                request.Content.Headers.ContentType = System.Net.Http.Headers.MediaTypeHeaderValue.Parse("application/json; charset=utf-8");
                return(request);
            }

            return(this.httpClient.SendAsync(RequestFunc, url, requestId, cancellationToken));
        }