将重复项键添加到NameValueCollection

G-M*_*Man 3 .net c# namevaluecollection

我已经读过NameValueCollection允许添加重复键,但是当我尝试使用它时似乎不是这种情况.

我的守则

using (var wb = new WebClient())
{
     var data = new NameValueCollection();
     var sourceData = (List<Dictionary<string, object>>)dic["mapData"];
     var countSource = sourceData.Count;

     foreach (var item in (List<Dictionary<string, object>>)dic["mapData"])
     {
          data.Add("pp", item["Latitude"].ToString() + "," + item["Longitude"].ToString());
     }

     var dataCount = data.Count;
     var response = wb.UploadValues(@"http://dev.virtualearth.net/REST/V1/Imagery/Map/road/?mapArea=" + swLat.ToString() + "," + swLong + "," + neLat + "," + neLong + "&mapSize=800,600&key=" + key, "POST", data);

     return this.LargeJson(new { imageData = CreateBase64Image(response) });
}
Run Code Online (Sandbox Code Playgroud)

我在观察什么

我的sourceData包含36个项目

手表

我正在迭代sourceData并将项添加到我的NameValueCollection数据并添加具有相同键"pp"的项目

我期待在我的数据NameValueCollection中有36个项目,但我只得到1并且我的所有值都被附加到同一个键.

我错过了什么?

Lee*_*Lee 8

这是预期的行为 - 请参阅文档:

如果指定的键已存在于目标NameValueCollection实例中,则指定的值将以"value1,value2,value3"形式添加到现有的以逗号分隔的值列表中.这些值与目标NameValueCollection实例中的相同键相关联.

  • 如果值包含逗号怎么办?例如,我可以将Uri制作为:“ http://example.com/q?value=a%2Cb&amp;value=b%2Cc”。这些值将被解码为“ a,b”和“ b,c”,如果将它们拍在一起,它们最终将以“ a,b,b,c”结尾。这样无法正常工作。应该强烈警告使用重复键意味着您的值不能包含逗号,否则将不可避免地丢失参数值之间明确定义的边界。如果NameValueCollection的实现正确,它将在数组中维护具有相同名称的值,而不是用逗号分隔的字符串。 (2认同)