C#WebClient没有正确地将数据发布到PHP脚本

时间:2016-11-05 23:48:21

标签: c# php post webclient

C#:

public static String coinflip(int a){
    StringBuilder sb = new StringBuilder();
    for(int i = 0; i < a; i++){
        int coin = (int)(Math.random() * 2);
        sb.append(coin == 0 ? "T" : "H");  // like an if-else 
    }
    return sb.toString();
} 

PHP:

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 $ _POST数组永远不会有任何实际发布到它的值。这意味着回波线没有输出。

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

2 个答案:

答案 0 :(得分:1)

url将值编码为:

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

答案 1 :(得分:1)

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

你应该明确并说

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

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

  

Collection初始化程序允许您在初始化实现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 }
                                      });