public static string AppendQueryStringToUrl(string OriginalUrl, string QsKey, string QsValue, string AppendMatchingTagDelim = "", string NewAnchor = "") { return(Urls.AppendQueryStringToUrl(OriginalUrl, QsKey, QsValue, AppendMatchingTagDelim, NewAnchor)); var url = new Uri(OriginalUrl); return(AppendQueryStringToUrl(url, QsKey, QsValue, AppendMatchingTagDelim, NewAnchor)); }
public static string AppendQueryStringToUrl(Uri OriginalUri, string QsKey, string QsValue, string AppendMatchingTagDelim = "", string NewAnchor = "") { return(Urls.AppendQueryStringToUrl(OriginalUri, QsKey, QsValue, AppendMatchingTagDelim, NewAnchor)); var uri = OriginalUri; var baseUrl = uri.AbsoluteUri; var basePath = uri.AbsolutePath; //Anchor Tag var currAnchor = uri.Fragment.Replace("#", ""); var providedAnchor = NewAnchor.Replace("#", ""); var newAnchor = ""; if (currAnchor != "") { if (NewAnchor != "") { newAnchor = providedAnchor; } else { newAnchor = currAnchor; } newAnchor = "#" + newAnchor; } else { newAnchor = providedAnchor; } //Query String Values var qs = GetQueryStringDictionary(uri.Query); var allQs = "&"; var newKeyProcessed = false; foreach (var item in qs) { if (item.Key == QsKey) { //matches the new KV - process newKeyProcessed = true; if (QsValue != "") { if (AppendMatchingTagDelim != "") { var currVals = item.Value.Split(AppendMatchingTagDelim.ToCharArray()); if (!currVals.Contains(QsValue)) { //append value to existing allQs = string.Format("{0}&{1}={2}{3}{4}", allQs, QsKey, item.Value, AppendMatchingTagDelim, QsValue); } } else { //replace value allQs = string.Format("{0}&{1}={2}", allQs, QsKey, QsValue); } } else { //remove tag - skip } } else { //Just append it as-is allQs = string.Format("{0}&{1}={2}", allQs, item.Key, item.Value); } } if (!newKeyProcessed && QsValue != "") { //Wasn't in current URI, needs to be added allQs = string.Format("{0}&{1}={2}", allQs, QsKey, QsValue); } allQs = allQs.Replace("&&", ""); //Build New Url var newUrl = string.Format("{0}?{1}{2}", basePath, allQs, newAnchor); newUrl = newUrl.Replace("?&", "?"); //Cleanup if all QS have been removed //uri.Rewrite(newUrl); return(newUrl); }