Мне нужна была функция, которая немного более универсальна, чем та, которая была предоставлена уже при работе с OLSC-запросами.
- Значения могут содержать несколько знаков равенства
- Декодировать закодированные символы в имени и значении
- Возможность работы на клиентской платформе
- Возможность работы на Mobile Framework.
Вот мое решение:
Public Shared Function ParseQueryString(ByVal uri As Uri) As System.Collections.Specialized.NameValueCollection
Dim result = New System.Collections.Specialized.NameValueCollection(4)
Dim query = uri.Query
If Not String.IsNullOrEmpty(query) Then
Dim pairs = query.Substring(1).Split("&"c)
For Each pair In pairs
Dim parts = pair.Split({"="c}, 2)
Dim name = System.Uri.UnescapeDataString(parts(0))
Dim value = If(parts.Length = 1, String.Empty,
System.Uri.UnescapeDataString(parts(1)))
result.Add(name, value)
Next
End If
Return result
End Function
Возможно, неплохо было бы добавить к этому <Extension()>
, чтобы добавить возможность к самому Ури.