using System.Collections.Generic;
private static Dictionary<string, string> DecodeQueryParameters(string query)
return query.TrimStart('?')
.Split(new[] { '&' }, StringSplitOptions.RemoveEmptyEntries)
.Select(parameter => parameter.Split(new[] { '=' }, StringSplitOptions.RemoveEmptyEntries))
.GroupBy(parts => parts[0],
parts => parts.Length > 2 ? string.Join("=", parts, 1, parts.Length - 1) : (parts.Length > 1 ? parts[1] : ""))
.ToDictionary(grouping => grouping.Key,
grouping => string.Join(",", grouping));
public static void Main()
var res = DecodeQueryParameters("/upload/presignedurl?originalFileName=test%26plus%2Bsome_stuff.aif&ws=a59a3061-3d1a-4de6-97a7-0cbed0f9fde5&destination=music_manager&onlyUploadAsset=false&destinationId=");
Console.WriteLine(string.Join(" ", res.Keys));