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)); }
/// <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); }