【问题标题】:C# WebClient not posting data correctly to PHP scriptC# WebClient 未将数据正确发布到 PHP 脚本
【发布时间】:2016-11-05 23:48:20
【问题描述】:

C#:

using (WebClient client = new WebClient()) {
    byte[] response = client.UploadValues("http://example.com/api/server/key",
                                          new NameValueCollection() {
                                              { "key", key }
                                          });

    string result = Encoding.UTF8.GetString(response);
    Console.WriteLine(result);
}

PHP:

$key = $_POST["key"];
echo($key);

当它运行时,PHP $_POST 数组永远不会有任何实际发布到它的值。表示回显行没有输出。

另外,是的,'key' 确实有一个值,在这个例子中它只是被裁剪掉了。

【问题讨论】:

    标签: c# php post webclient


    【解决方案1】:

    我不确定,new NameValueCollection() { ... } 表达式是否符合您的要求。

    你应该明确地说出来

    NameValueCollection values = new NameValueCollection();
    values.Add("key", key);
    byte[] response = client.UploadValues("http://example.com/api/server/key",
                                          values);
    

    搜索对象初始值设定项显示Collection initializers

    集合初始化器允许您在初始化实现 IEnumerable 的集合类或具有 Add 扩展方法的类时指定一个或多个元素初始化器。

    还有一个例子

    List<Cat> cats = new List<Cat>
    {
        new Cat(){ Name = "Sylvester", Age=8 },
        new Cat(){ Name = "Whiskers", Age=2 },
        new Cat(){ Name = "Sasha", Age=14 }
    };
    

    所以也许使用不带括号的初始化器是可行的,例如

    byte[] response = client.UploadValues("http://example.com/api/server/key",
                                          new NameValueCollection {
                                              { "key", key }
                                          });
    

    【讨论】:

    • 这两种方式都不一样吗?尽管如此,它仍然不能解决我的 PHP 没有获取 POST 数据的问题。
    • 如果这也不起作用,那么我猜URL是错误的。
    • 叹息...我觉得自己像个白痴。我认真地认为我正在为此失去理智。我忘记了 url 中的 / after 键,导致它无法发布到该目录中的 index.php。谢谢大家的帮助。我现在要哭了:)
    【解决方案2】:

    url 将值编码为:

    client.UploadValues("http://example.com/api/server/key", new NameValueCollection()
        {
            { "key", HttpUtility.UrlEncode(key) }
        });
    

    【讨论】:

    • 感谢您的快速回复。但这实际上是行不通的。仍然没有发布价值。
    • 这里是整个函数,如果它改变了任何东西,虽然我看不出它会如何。 codetidy.com/9486
    • 您发布的密钥的值是多少?可能是一个空字符串?
    • 不,它是一个 64 字符长的字符串。
    • 我也尝试过使用 WebRequest 并且遇到了完全相同的问题。我知道 Web 服务器配置正确,所以它必须是 C#。例如:codetidy.com/9488
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-05
    • 2017-04-27
    • 1970-01-01
    • 1970-01-01
    • 2013-09-04
    • 2012-08-28
    • 2014-01-04
    相关资源
    最近更新 更多