WebClient中的POST数组(C#/ .net)

时间:2010-10-15 12:59:26

标签: c# .net arrays file-upload webclient

我有一个.net应用程序,它有一个WebRequest,它对POST添加了多次相同的密钥,因此在PHP,Java Servlets等眼中使它成为一个数组。我想把它重写为使用WebClient,但如果我多次使用相同的键调用WebClient的QueryString.Add(),它只会附加新值,使用逗号分隔的单个值而不是值数组。

我使用WebClient的UploadFile()发布我的请求,因为除了这些元数据,我还想发布一个文件。

如何使用WebClient发布值数组而不是单个值(以逗号分隔的值)?

干杯

的Nik

1 个答案:

答案 0 :(得分:5)

PHP只是使用解析器将以数组格式发送的多个值转换为数组。 格式为<arrayName>[<key>]

因此,如果您希望从$_GET接收PHP中的数组,请添加以下查询参数:x[key1]x[key2]。 PHP中的$_GET['x']将是一个包含2个项目的数组:["x"]=> array(2) { ["key1"]=> <whatever> ["key2"]=> <whatever> }

修改 - 您可以尝试以下扩展方法:

public static class WebClientExtension
{
    public static void AddArray(this WebClient webClient, string key, params string[] values)
    {
        int index = webClient.QueryString.Count;

        foreach (string value in values)
        {
            webClient.QueryString.Add(key + "[" + index + "]", value);
            index++;
        }
    }
}

并在代码中:

webClient.AddArray("x", "1", "2", "3");
webClient.AddArray("x", "4");

或手动:

webClient.QueryString.Add("x[key1]", "4");
webClient.QueryString.Add("x[key2]", "1");

没有错误检查等。您可以自己做:)