Ma préférence personnelle ici est de réécrire la requête ou de travailler avec une collection nommée à un niveau inférieur, mais il arrive parfois que la logique commerciale ne rend aucune de ces informations très utiles et que, parfois, la réflexion soit ce dont vous avez besoin. Dans ces circonstances, vous pouvez simplement désactiver le drapeau readonly un instant comme ceci:
// 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);