Мое личное предпочтение здесь - переписать запрос или работать с коллекцией namevalue на более низком уровне, но бывают моменты, когда бизнес-логика не делает ничего из этого очень полезной, и иногда рефлексия действительно является тем, что вам нужно. В этих обстоятельствах вы можете просто отключить флаг readonly, например, так:
// reflect to readonly property
PropertyInfo isreadonly = typeof(System.Collections.Specialized.NameValueCollection).GetProperty("IsReadOnly", BindingFlags.Instance | BindingFlags.NonPublic);
// make collection editable
isreadonly.SetValue(this.Request.QueryString, false, null);
// remove
this.Request.QueryString.Remove("foo");
// modify
this.Request.QueryString.Set("bar", "123");
// make collection readonly again
isreadonly.SetValue(this.Request.QueryString, true, null);