从代码调用Web资源时的常见任务是构建查询字符串以包含所有必要的参数。虽然绝对不是火箭科学,但是您需要处理一些漂亮的细节,例如,&如果不是第一个参数,则附加一个参数,对参数进行编码等。
&
要做的代码很简单,但是有点乏味:
StringBuilder SB = new StringBuilder(); if (NeedsToAddParameter A) { SB.Append("A="); SB.Append(HttpUtility.UrlEncode("TheValueOfA")); } if (NeedsToAddParameter B) { if (SB.Length>0) SB.Append("&"); SB.Append("B="); SB.Append(HttpUtility.UrlEncode("TheValueOfB")); } }
这是一项如此常见的任务,人们期望存在一个实用程序类,该实用程序类将使其更加优雅和可读。扫描MSDN时,我找不到一个,这使我想到以下问题:
您做上述事情时最优雅的清洁方式是什么?
如果您深入研究QueryString属性是一个NameValueCollection。做完类似的事情后,我通常会对序列化和反序列化感兴趣,因此我的建议是建立一个NameValueCollection,然后传递给:
using System.Linq; using System.Web; using System.Collections.Specialized; private string ToQueryString(NameValueCollection nvc) { var array = ( from key in nvc.AllKeys from value in nvc.GetValues(key) select string.Format( "{0}={1}", HttpUtility.UrlEncode(key), HttpUtility.UrlEncode(value)) ).ToArray(); return "?" + string.Join("&", array); }
我想在LINQ中也有一种超级优雅的方式来做到这一点…