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

nik*_*ers 7 .net c# arrays webclient file-upload

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

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

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

干杯

Jar*_*dek 5

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

因此,如果您想通过$_GET添加这些查询参数来接收PHP中的数组:x[key1]x[key2].$_GET['x']在PHP中将是一个包含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++;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

并在代码中:

webClient.AddArray("x", "1", "2", "3");
webClient.AddArray("x", "4");
Run Code Online (Sandbox Code Playgroud)

或手动:

webClient.QueryString.Add("x[key1]", "4");
webClient.QueryString.Add("x[key2]", "1");
Run Code Online (Sandbox Code Playgroud)

没有错误检查等.你可以自己做:)