These 2 extension methods will remove specific query string parameters from an URL in a safe manner.
METHOD #1: SPECIFY THE PARAMETERS THAT SHOULD GO (NEGATIVE LIST):
using System;
using System.Linq;
using System.Web;
namespace MyCode
{
public static class UrlExtension
{
public static string RemoveQueryStringsFromUrl(this string url, string[] keys)
{
if (!url.Contains("?"))
return url;
string[] urlParts = url.ToLower().Split('?');
try
{
var querystrings = HttpUtility.ParseQueryString(urlParts[1]);
foreach (string key in keys)
querystrings.Remove(key.ToLower());
if (querystrings.Count > 0)
return urlParts[0]
+ "?"
+ string.Join("&", querystrings.AllKeys.Select(c => c.ToString() + "=" + querystrings[c.ToString()]));
else
return urlParts[0];
}
catch (NullReferenceException)
{
return urlParts[0];
}
}
}
}
Usage/Test cases:
string url = "https://briancaos.wordpress.com/page/?id=1&p=2";
string url2 = url.RemoveQueryStringsFromUrl(url, new string[] {"p"});
string url3 = url.RemoveQueryStringsFromUrl(url, new string[] {"p", "id"});
//Result:
// https://briancaos.wordpress.com/page/?id=1
// https://briancaos.wordpress.com/page
METHOD #2: SPECIFY THE PARAMETERS THAT MAY STAY (POSITIVE LIST):
using System;
using System.Linq;
using System.Web;
namespace MyCode
{
public static class UrlExtension
{
public static string RemoveQueryStringsFromUrlWithPositiveList(this string url, string[] allowedKeys)
{
if (!url.Contains("?"))
return url;
string[] urlParts = url.ToLower().Split('?');
try
{
var querystrings = HttpUtility.ParseQueryString(urlParts[1]);
var keysToRemove = querystrings.AllKeys.Except(allowedKeys);
foreach (string key in keysToRemove)
querystrings.Remove(key);
if (querystrings.Count > 0)
return urlParts[0]
+ "?"
+ string.Join("&", querystrings.AllKeys.Select(c => c.ToString() + "=" + querystrings[c.ToString()]));
else
return urlParts[0];
}
catch (NullReferenceException)
{
return urlParts[0];
}
}
}
}
Usage/Test cases:
string url = "https://briancaos.wordpress.com/page/?id=1&p=2";
string url2 = url.RemoveQueryStringsFromUrl(url, new string[] {"p"});
string url3 = url.RemoveQueryStringsFromUrl(url, new string[] {"p", "id"});
//Result:
// https://briancaos.wordpress.com/page/?p=2
// https://briancaos.wordpress.com/page/?id=1&p=2
MORE TO READ:
- How to efficiently remove a query string by Key from a Url? from stackoverflow