Alternative à HttpUtility.ParseQuerySsortingng sans dépendance System.Web?

Je veux pouvoir créer des chaînes de requête d’URL en ajoutant simplement la clé et la valeur à une classe d’assistance et le renvoyer sous forme de requête d’URL Je sais que cela peut être fait, comme suit:

var queryBuilder= HttpUtility.ParseQuerySsortingng("http://baseurl.com/?"); queryBuilder.Add("Key", "Value"); ssortingng url = queryBuilder.ToSsortingng(); 

Quel est exactement le comportement que je suis après. Cependant, cette classe existe dans la très grande et très grande System.Web et je préférerais ne pas apporter cette bibliothèque entière pour cela. Y a-t-il une alternative quelque part?

La HttpValueCollection que vous utilisez dans votre exemple n’est pas vraiment sortingviale et utilise beaucoup d’autres parties de la bibliothèque System.Web pour coder une URL http valide pour vous. Il est possible d’extraire le code source des pièces dont vous avez besoin, mais cela aurait plus de conséquences en cascade!

Si vous comprenez cela et que vous voulez simplement quelque chose de primitif parce que vous vous assurez déjà que les clés et les valeurs sont codées correctement, la chose la plus simple à faire est simplement de lancer les vôtres.

Voici un exemple, sous la forme d’une méthode d’extension à NameValueCollection:

 public static class QueryExtensions { public static ssortingng ToQuerySsortingng(this NameValueCollection nvc) { IEnumerable segments = from key in nvc.AllKeys from value in nvc.GetValues(key) select ssortingng.Format("{0}={1}", WebUtility.UrlEncode(key), WebUtility.UrlEncode(value)); return "?" + ssortingng.Join("&", segments); } } 

Vous pouvez utiliser cette extension pour construire une chaîne de requête comme ceci:

 // Initialise the collection with values. var values = new NameValueCollection {{"Key1", "Value1"}, {"Key2", "Value2"}}; // Or use the Add method, if you prefer. values.Add("Key3", "Value3"); // Build a Uri using the extension method. var url = new Uri("http://baseurl.com/" + values.ToQuerySsortingng());