private static string EvaluateSegmentMatch(Match match, object segments)
        {
            if (segments == null)
            {
                throw new ArgumentException("Route expects 'segments' object, but it was null.", nameof(segments));
            }

            var name     = match.Result("$1");
            var property = segments.GetType().GetProperty(name);

            if (property == null)
            {
                throw new ArgumentException($"Property '{name}', which is required by the route, not found in 'segments' object.", nameof(segments));
            }

            var value = property.GetValue(segments);

            if (value == null)
            {
                throw new ArgumentException($"'segments' object has '{name}' value equal to 'null'.", nameof(segments));
            }

            var stringValue = WebApiClientHelper.SerializeValueToJson(value);

            return(stringValue);
        }
        private Task <HttpResponseMessage> SendRequest(ServiceRequest request)
        {
            var uri = request.Route;

            var finalUri = WebApiClientHelper.AddQueryParams(uri, request.QueryParameters);
            var message  = new HttpRequestMessage(request.HttpMethod, finalUri);

            if (request.Body != null)
            {
                var json = JsonConvert.SerializeObject(request.Body, WebApiClientHelper.JsonSerializerSettings);
                message.Content = new StringContent(json, Encoding.UTF8, "application/json");
            }

            if (request.Headers != null)
            {
                foreach (var pair in request.Headers)
                {
                    var headerName  = pair.Key;
                    var headerValue = pair.Value;

                    if (headerValue != null)
                    {
                        message.Headers.Add(headerName, headerValue);
                    }
                }
            }

            return(this.HttpClient.SendAsync(message));
        }