Search code examples
c#listhttpwebrequest

Building a List with multiple URL Params in C#


I am trying to build a generic function that will run a simple HTTP Get request using various possible URL Params. I want to be able to receive a flexible number of strings as a parameter and add them one by one as a URL parameter in the request. Here's my code so far, I am trying to build a List but for some reason I just can't muster a workign solution..

        public static void GetRequest(List<string> lParams)
    {
        lParams.Add(header1);
        string myURL = "";
        HttpWebRequest WebReq = (HttpWebRequest)WebRequest.Create(string.Format(myURL));
        WebReq.Method = "GET";
        HttpWebResponse WebResp = (HttpWebResponse)WebReq.GetResponse();
        Stream Answer = WebResp.GetResponseStream();
        StreamReader _Answer = new StreamReader(Answer);
        sContent = _Answer.ReadToEnd();
    }

Thanks!


Solution

  • I think you need this:

    private static string CreateUrl(string baseUrl, Dictionary<string, string> args)
    {
        var sb = new StringBuilder(baseUrl);
        var f = true;
        foreach (var arg in args)
        {
            sb.Append(f ? '?' : '&');
            sb.Append(WebUtility.UrlEncode(arg.Key) + '=' + WebUtility.UrlEncode(arg.Value));
            f = false;
        }
        return sb.ToString();
    }
    

    Not so complex version with comments:

    private static string CreateUrl(string baseUrl, Dictionary<string, string> parameters)
    {
        var stringBuilder = new StringBuilder(baseUrl);
        var firstTime = true;
    
        // Going through all the parameters
        foreach (var arg in parameters)
        {
            if (firstTime)
            {
                stringBuilder.Append('?'); // first parameter is appended with a ? - www.example.com/index.html?abc=3
                firstTime = false; // All other following parameters should be added with a &
            }
            else
            {
                stringBuilder.Append('&'); // all  other parameters are appended with a & - www.example.com/index.html?abc=3&abcd=4&abcde=8
            }
    
            var key = WebUtility.UrlEncode(arg.Key); // Converting characters which are not allowed in the url to escaped values
            var value = WebUtility.UrlEncode(arg.Value); // Same goes for the value
    
            stringBuilder.Append(key + '=' + value); // Writing the parameter in the format key=value
        }
    
        return stringBuilder.ToString(); // Returning the url with parameters
    }