I am working on an internal web application that does some state management through the query string. That being the case, I have to add, remove and change paramters in the query string. Here are the functions that I use to edit the URL to change these varables
// Takes a URL with parameters and replaces the current value of a given parameter // with the new value provided public static string replaceParameterInUrl(string theUrl, string param, string newValue) { StringBuilder sb = new StringBuilder(); string[] parts = theUrl.Split(new char[] { '?', '&' }); sb.Append(parts[0]).Append("?"); for (int i = 1; i < parts.Length; ++i) { string thisParam = parts[i]; string[] paramParts = thisParam.Split(new char[] { '=' }); if (paramParts[0] != param) sb.Append(thisParam).Append("&"); } sb.Append(param).Append("=").Append(newValue); return sb.ToString(); } /// Takes a URL with parameters and replaces the current value of a given parameter /// with the new value provided public static string removeParameterFromUrl(string theUrl, string param) { StringBuilder sb = new StringBuilder(); bool isFirstItem = true; string[] parts = theUrl.Split(new char[] { '?', '&' }); sb.Append(parts[0]).Append("?"); for (int i = 1; i < parts.Length; ++i) { string thisParam = parts[i]; string[] paramParts = thisParam.Split(new char[] { '=' }); if (paramParts[0] != param) { if (!isFirstItem) sb.Append("&"); sb.Append(thisParam); isFirstItem = false; } } return sb.ToString(); }
If I was going to use these functions in a public facing site,I'd probably sort the parameters alphabetically, so there would be less flux in the URLs that Google would see