【问题标题】:POST'ing arrays in WebClient (C#/.net)在 WebClient (C#/.net) 中发布数组
【发布时间】:2011-04-25 22:33:06
【问题描述】:

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

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

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

干杯

尼克

【问题讨论】:

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


    【解决方案1】:

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

    因此,如果您想在 PHP 中从 $_GET 接收数组,请添加以下查询参数: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");
    

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

    【讨论】:

    • 正确,这就是 PHP 解析数组的方式。但是,据我所知,WebClient 将改为给出 ["x"] = "whatever,whatever",这不是我想要发送的。您对我如何使 WebClient 行为正确有什么建议吗?
    • @niklassaers: 使用webClient.QueryString.Add("x[key1]", "4");webClient.QueryString.Add("x[key2]", "3"); 我总是在$_GET 中得到一个数组。我的 PHP 版本是 5.3.2。
    • 感谢您的提示,我会在星期一试一试。 :-)
    • 嗯,我可能误会你了。我做了 webClient.QueryString.Add("x[0]", "1"); webClient.QueryString.Add("x[1]", "2"); webClient.QueryString.Add("x[2]", "3");但这只给了我三个键,每个键都有一个值,而不是一个键具有值数组 [1, 2, 3]。您如何建议我使用 WebClient 获取名称为 x 且值为 [1, 2, 3] 的数组,而不是 WebClient 在我执行 webClient.QueryString.Add( "x", "1"); webClient.QueryString.Add("x", "2"); webClient.QueryString.Add("x", "3");
    • 您正在发布到 PHP,对吗?所以在 PHP 中你会得到一个数组。 WebClient 不支持它,因此您无法在查询字符串中“获取”数组,您只能将数组(使用上述方式)发布到 PHP。您需要创建自己的 WebClient 或 QueryString 包装器来为您完成 - 恕我直言,当您可以使用我发布的方法非常简单地完成它时,这是浪费时间......没有 http 系统发布数组,只有单个值 -它在接收端(PHP)被转换为一个数组。如果你想在.NET中接收数组,你需要自己解析响应!
    猜你喜欢
    • 2012-12-05
    • 1970-01-01
    • 2013-02-12
    • 2015-07-19
    • 2011-07-21
    • 1970-01-01
    • 2017-03-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多