Para pegar um valor de uma QueryString basta usar o seguinte código.
Request.QueryString["key"]
Porem para alterar, adicionar ou remover valores de uma QueryString é um pouco diferente. Como uma QueryString é somente leitura, não podemos atribuir valores da mesma forma que podemos pegá-los.
Para manipular a QueryString vamos usar a NameValueCollection.
Uma QueryString já é do tipo NameValueCollection, mas como ela é somente leitura, vamos cloná-la para um novo NameValueCollection e depois manipular.
Vamos imaginar uma situação do dia a dia, você tem uma página de busca com vários filtros.
Todos os filtros você passa por parâmetro pela URL, bem como a paginação do resultado.
http://site.com/busca.aspx?nome=teste&estado=5&cidade=205&pagina=1
Abaixo um exemplo de como editar os parametros da QuryString
//NameValueCollection que será usada para clonar a QueryString
NameValueCollection nvcQuerystring = new NameValueCollection();
//Como QueryString é apenas leitura, vou usar o foreach para clonar
foreach (string key in Request.QueryString.Keys)
nvcQuerystring.Add(key, Request.QueryString[key]);
//Adiciona ou altera o valor
nvcQuerystring.Set("pagina", "2");
//Remover o parametro e o valor da querystring
nvcQuerystring.Remove("pagina");
//Adiciona ou concatena, no caso de já existir valor
nvcQuerystring.Add("pagina", "2");
string strNovaQuerystring = string.Empty;
//foreach para montar a nova Querystring
foreach (string key in nvcQuerystring.Keys)
{
strNovaQuerystring += key + "=" + nvcQuerystring[key] + "&";
}
//Adiciona '?' e remove o último '&'
if(!string.IsNullOrEmpty(strNovaQuerystring))
strNovaQuerystring = "?" + strNovaQuerystring.TrimEnd('&');
//Fazer o redirect para a nova URL
Response.Redirect(Request.Url.AbsolutePath + strNovaQuerystring);