private static Uri BuildRequestUri(string requestUri, object parameters)
        {
            if (parameters != null)
            {
                var query = QueryStringParameterCollection.FromObject(parameters);
                requestUri = UriUtility.AddQuery(requestUri, query);
            }

            return(new Uri(requestUri, UriKind.RelativeOrAbsolute));
        }
示例#2
0
        /// <summary>
        /// Appends the specified query string parameters to the specified URI.
        /// </summary>
        /// <param name="uri">
        /// The URI to append to. The URI may be relative or absolute, and may
        /// contain a query string.
        /// </param>
        /// <param name="query">
        /// A collection of query string parameters to append to <paramref name="uri"/>.
        /// </param>
        /// <returns>
        /// A new string that represents <paramref name="uri"/> with additional query
        /// string parameters.
        /// </returns>
        public static string AddQuery(string uri, QueryStringParameterCollection query)
        {
            var queryFromPath = QueryStringParameterCollection.Parse(uri);

            var queryPosition = uri.LastIndexOf('?');

            if (queryPosition >= 0)
            {
                uri = uri.Substring(0, queryPosition);
            }

            var newQuery = queryFromPath.Add(query);

            return(uri + '?' + newQuery);
        }
        /// <summary>
        /// Converts a query string to the equivalent <see
        /// cref="QueryStringParameterCollection"/> class.
        /// </summary>
        /// <param name="query">The string to convert.</param>
        /// <returns>An object that contains the query string that was parsed.</returns>
        public static QueryStringParameterCollection Parse(string query)
        {
            var queryStringParameters = new QueryStringParameterCollection();

            if (query == null)
            {
                throw new ArgumentNullException(nameof(query));
            }

            var queryStart = query.LastIndexOf('?');

            if (queryStart >= 0)
            {
                query = query.Substring(queryStart + 1);
            }

            foreach (var item in query.Split('&'))
            {
                if (string.IsNullOrEmpty(item))
                {
                    continue;
                }

                var separator = item.IndexOf('=');
                if (separator >= 0)
                {
                    var name  = HttpUtility.UrlDecode(item.Substring(0, separator));
                    var value = HttpUtility.UrlDecode(item.Substring(separator + 1));
                    queryStringParameters.Add(name, value);
                }
                else
                {
                    queryStringParameters.Add(item, null);
                }
            }

            return(queryStringParameters);
        }
        /// <summary>
        /// Creates a new instance of the <see
        /// cref="QueryStringParameterCollection"/> class using the names and values
        /// of public properties from the specified object.
        /// </summary>
        /// <param name="parameters">An object whose public properties to use.</param>
        /// <returns>A new <see cref="QueryStringParameterCollection"/> object.</returns>
        public static QueryStringParameterCollection FromObject(object parameters)
        {
            if (parameters == null)
            {
                throw new ArgumentNullException(nameof(parameters));
            }

            var queryStringParameters = new QueryStringParameterCollection();

            var type = parameters.GetType();

            foreach (var property in type.GetProperties())
            {
                var name  = property.Name;
                var value = property.GetValue(parameters);
                if (value != null)
                {
                    queryStringParameters.Add(name, value);
                }
            }

            return(queryStringParameters);
        }
 /// <summary>
 /// Copies the entries in the specified <see
 /// cref="QueryStringParameterCollection"/> to the current collection.
 /// </summary>
 /// <param name="collection">The collection whose entries to copy.</param>
 public QueryStringParameterCollection Add(QueryStringParameterCollection collection)
 {
     Add(collection.Collection);
     return(this);
 }