Boaz Boaz - 1 year ago 241
C# Question

How to build a query string for a URL in C#?

A common task when calling web resources from a code is building a query string to including all the necessary parameters. While by all means no rocket science, there are some nifty details you need to take care of like, appending an

if not the first parameter, encoding the parameters etc.

The code to do it is very simple, but a bit tedious:

StringBuilder SB = new StringBuilder();
if (NeedsToAddParameter A)
SB.Append("A="); SB.Append(HttpUtility.UrlEncode("TheValueOfA"));

if (NeedsToAddParameter B)
if (SB.Length>0) SB.Append("&");
SB.Append("B="); SB.Append(HttpUtility.UrlEncode("TheValueOfB")); }

This is such a common task one would expect a utility class to exist that makes it more elegant and readable. Scanning MSDN, I failed to find one—which brings me to the following question:

What is the most elegant clean way you know of doing the above?

Answer Source

If you look under the hood the QueryString property is a NameValueCollection. When I've done similar things I've usually been interested in serialising AND deserialising so my suggestion is to build a NameValueCollection up and then pass to:

using System.Web;
using System.Collections.Specialized;

private string ToQueryString(NameValueCollection nvc)
    var array = (from key in nvc.AllKeys
        from value in nvc.GetValues(key)
        select string.Format("{0}={1}", HttpUtility.UrlEncode(key), HttpUtility.UrlEncode(value)))
    return "?" + string.Join("&", array);

Possibly I could've formatted that better :)

I imagine there's a super elegant way to do this in LINQ too...

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download