me gusta la brevedad de Jon Canning's answer, pero en aras de la variedad, aquí es otra alternativa a su respuesta, que también funcionaría para entornos restringidos como Windows Phone 8, que carecen de la HttpUtility.ParseQueryString()
utilidad:
public static Dictionary<string, string> ParseQueryString(String query)
{
Dictionary<String, String> queryDict = new Dictionary<string, string>();
foreach (String token in query.TrimStart(new char[] { '?' }).Split(new char[] { '&' }, StringSplitOptions.RemoveEmptyEntries))
{
string[] parts = token.Split(new char[] { '=' }, StringSplitOptions.RemoveEmptyEntries);
if (parts.Length == 2)
queryDict[parts[0].Trim()] = HttpUtility.UrlDecode(parts[1]).Trim();
else
queryDict[parts[0].Trim()] = "";
}
return queryDict;
}
en realidad, una mejora útil a la respuesta de Canning que se ocupan de los valores de codificación URL de decodificación (como en la solución anterior) es:
public static Dictionary<string, string> ParseQueryString2(String query)
{
return Regex.Matches(query, "([^?=&]+)(=([^&]*))?").Cast<Match>().ToDictionary(x => x.Groups[1].Value, x => HttpUtility.UrlDecode(x.Groups[3].Value));
}
en Silverlight :-(copiar/pegar - aquí vengo ... – mark