The Light The Light - 8 days ago 5
C# Question

How to efficiently remove a query string by Key from a Url?

How to remove a query string by Key from a Url?

I have the below method which works fine but just wondering is there any better/shorter way? or a built-in .NET method which can do it more efficiently?

public static string RemoveQueryStringByKey(string url, string key)
{
var indexOfQuestionMark = url.IndexOf("?");
if (indexOfQuestionMark == -1)
{
return url;
}

var result = url.Substring(0, indexOfQuestionMark);
var queryStrings = url.Substring(indexOfQuestionMark + 1);
var queryStringParts = queryStrings.Split(new [] {'&'});
var isFirstAdded = false;

for (int index = 0; index <queryStringParts.Length; index++)
{
var keyValue = queryStringParts[index].Split(new char[] { '=' });
if (keyValue[0] == key)
{
continue;
}

if (!isFirstAdded)
{
result += "?";
isFirstAdded = true;
}
else
{
result += "&";
}

result += queryStringParts[index];
}

return result;
}


For example I can call it like:

Console.WriteLine(RemoveQueryStringByKey(@"http://www.domain.com/uk_pa/PostDetail.aspx?hello=hi&xpid=4578", "xpid"));


Hope the question is clear.

Thanks,

Answer

This works well:

public static string RemoveQueryStringByKey(string url, string key)
        {                   
            var uri = new Uri(url);

            // this gets all the query string key value pairs as a collection
            var newQueryString = HttpUtility.ParseQueryString(uri.Query);

            // this removes the key if exists
            newQueryString.Remove(key);

            // this gets the page path from root without QueryString
            string pagePathWithoutQueryString = uri.GetLeftPart(UriPartial.Path);

            return newQueryString.Count > 0
                ? String.Format("{0}?{1}", pagePathWithoutQueryString, newQueryString)
                : pagePathWithoutQueryString;
        }

an example:

RemoveQueryStringByKey("https://www.google.co.uk/search?#hl=en&output=search&sclient=psy-ab&q=cookie", "q");

and returns:

https://www.google.co.uk/#hl=en&output=search&sclient=psy-ab
Comments