这样做的原因是因为NameValueCollection
用逗号分隔重复的键。您可以扩展NameValueCollection
并覆盖该Get
方法并让它返回您想要的格式。
public class DupeNVC: NameValueCollection
{
private string _duplicateKey;
public DupeNVC(string duplicateKey = null)
{
_duplicateKey = duplicateKey;
}
public override string Get(int index)
{
//check if duplicate key has been specified
//if not, then call the default Get implementation
if (!String.IsNullOrEmpty(_duplicateKey))
{
ArrayList list = (ArrayList)base.BaseGet(index);
int num = (list != null) ? list.Count : 0;
if (num == 1)
{
return (string)list[0];
}
if (num > 1)
{
StringBuilder stringBuilder = new StringBuilder((string)list[0]);
for (int i = 1; i < num; i++)
{
//format our string and append the duplicate key specified
stringBuilder.AppendFormat("&{0}=", _duplicateKey);
stringBuilder.Append((string)list[i]);
}
return stringBuilder.ToString();
}
return null;
}
else
return base.Get(index);
}
}
你可以NameValueCollection
像平常一样使用它,但是如果你在构造函数中传入一个重复的字符串,它会寻找那个重复的键并运行上面修改过的代码(否则它将只使用默认base.Get
方法。
DupeNVC dnvc = new DupeNVC("formats");
foreach(var f in formats)
dnvc.Add("formats", f);
webClient.QueryString = dnvc;
这尚未经过全面测试,但它应该输出您想要的查询字符串格式。当然,这可以通过收集重复键进一步扩展,但这只是为了让您了解当前问题。