Pavel Zagalsky
Pavel Zagalsky

Reputation: 1636

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!

Upvotes: 0

Views: 210

Answers (1)

a-ctor
a-ctor

Reputation: 3733

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
}

Upvotes: 1

Related Questions