Imports System
Imports System.Collections.Specialized
Imports System.Web
Module QueryStringParserApp
''' <summary>
''' Parses and decodes a complete URL query string into a NameValueCollection.
''' </summary>
''' <param name="queryString">The URL query string (with or without leading '?').</param>
''' <returns>A NameValueCollection containing decoded keys and values.</returns>
Function ParseAndDecodeQuery(queryString As String) As NameValueCollection
' Remove leading '?' if present
If Not String.IsNullOrEmpty(queryString) AndAlso queryString.StartsWith("?") Then
queryString = queryString.Substring(1)
End If
' ParseQueryString automatically handles decoding and multi-value parameters
Return HttpUtility.ParseQueryString(queryString)
End Function
Sub Main()
Dim fullQuery As String = "search=vb.net+tutorial&category=programming&tag=beginner&tag=desktop"
Console.WriteLine("--- Full Query String Parsing ---")
Console.WriteLine($"Original Query: {fullQuery}")
Dim params As NameValueCollection = ParseAndDecodeQuery(fullQuery)
Console.WriteLine("Decoded Parameters Result:")
For Each key As String In params.AllKeys
' GetValues handles cases where a key appears multiple times (e.g., multiple 'tag' parameters)
Dim values As String() = params.GetValues(key)
Console.WriteLine($" {key} -> [{String.Join(", ", values)}]")
Next
End Sub
End Module
' run:
'
' --- Full Query String Parsing ---
' Original Query: search=vb.net+tutorial&category=programming&tag=beginner&tag=desktop
' Decoded Parameters Result:
' search -> [vb.net tutorial]
' category -> [programming]
' tag -> [beginner, desktop]
'