Попробуйте этот метод, манипулирование строками не злоупотребляет (я думаю).
Метод извлекает часть запроса, выбирает значения указанного ключа, кроме значений для удаления, затем перестраивает запрос, используя свойство UriBuilder.Query (которое можно установить), и, наконец, возвращает новый сформировано Uri
, пропущены удаленные пары ключ-значение.
Dim key As String = "A"
Dim valuesToRemove As String() = {"23", "1"}
Dim loc = New Uri("http://localhost/Index.aspx?A=23&A=7&A=1&B=2&B=4&C=23")
Dim newUri As Uri = UriRemoveKeyValues(loc, key, valuesToRemove)
Imports System.Web
Private Function UriRemoveKeyValues(uri As Uri, Key As String, Values As String()) As Uri
Dim nvc = HttpUtility.ParseQueryString(uri.Query)
Dim keyValues = nvc.GetValues(Key).Except(Values).ToList()
nvc.Remove(Key)
keyValues.ForEach(Sub(s) nvc.Add(Key, s))
Dim builder As New UriBuilder(uri) With {
.Query = nvc.ToString()
}
Return builder.Uri
End Function
Вы также можете просто получить Uri.Query
, разделить и перестроить таким же образом.
Тем не менее, больше манипуляций со строками.