software-mariodiana
3/3/2016 - 9:00 PM

Class to build an HTTP query string (to be assigned to a UriBuilder.Query property).

Class to build an HTTP query string (to be assigned to a UriBuilder.Query property).

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace YourNamespaceHere
{
    /// <summary>
    /// Builds an HTTP query string.
    /// </summary>
    /// <see cref="http://stackoverflow.com/a/18759100/155167"/>
    public class QueryStringBuilder
    {
        private readonly List<KeyValuePair<string, object>> _list;

        public QueryStringBuilder()
        {
            _list = new List<KeyValuePair<string, object>>();
        }

        public QueryStringBuilder Add(string name, object value)
        {
            _list.Add(new KeyValuePair<string, object>(name, value));
            // I changed this to make it more fluent. - M.D.
            return this;
        }

        public string Build()
        {
            return String.Join("&", _list.Select(kvp => String.Concat(
                Uri.EscapeDataString(kvp.Key),
                "=",
                Uri.EscapeDataString(kvp.Value.ToString()))));
        }

        public void Clear()
        {
            _list.Clear();
        }
        
        public override string ToString()
        {
            return Build();
        }
    }
}