C#WebClient上传字符串无法正常工作

时间:2016-06-09 12:26:35

标签: c# php json

所以我试图设置远程PHP脚本的POST数据。此脚本使用POST数据作为文件名,并使用它检索JSON文件。但遗憾的是,这不起作用。它检索没有值的数据。以下是它的工作原理:

C#:

using (WebClient client = new WebClient())
{
    byte[] saveData = client.UploadData(
       "http://" + ConfigurationManager.AppSettings["scripturi"].ToString() + "storeData.php",
        "POST",
        System.Text.Encoding.ASCII.GetBytes("filename="+ dt.bedrijfsNaam));
}

PHP:

<?php
$host='myip';
$user='username';
$pass='userpass';
$db='mydatabase';

$link= mysqli_connect($host, $user, $pass, $db) or die(msqli_error($link));

$filename = $_POST['filename'] . '.json';

$json = file_get_contents(__DIR__."/json/".$filename);// my thoughts are that something is wrong in this line?
$obj = json_decode($json);

$query_opslaan = "INSERT INTO skMain (BedrijfsName, ContPers, TelNum, email, Land, Plaats, PostCode) VALUES ('". $obj->bedrijfsNaam ."' , '". $obj->ContPers ."', '". $obj->TelNum ."', '". $obj->email ."', '". $obj->Land ."', '". $obj->Plaats ."', '". $obj->PostCode ."')";

mysqli_query($link, $query_opslaan) or die(mysqli_error($query_opslaan));
?>

它应该从JSON文件中检索正确的数据,但它不会检索所有值,并且查询将空白数据存储到数据库中。我认为我使用了C#脚本错误,这就是为什么我也认为$ json变量无法正常工作的原因。但我并不完全知道我做错了什么。有人可以帮助我吗?

1 个答案:

答案 0 :(得分:1)

当您查找PHP $_POST的文档时,您会发现:

  

当使用application / x-www-form-urlencoded或multipart / form-data作为请求中的HTTP Content-Type时,通过HTTP POST方法传递给当前脚本的关联变量数组。

这意味着您POST到服务器的内容必须是其中一个内容类型,并且其正文需要与预期格式匹配。

在您的代码中,您使用UploadData方法。那种方法对你没有任何魔力。它只是POST你给它的字节。您的请求将如下所示:

POST /questions/ask HTTP/1.1
Host: stackoverflow.com
Content-Length: 13
Expect: 100-continue
Connection: Keep-Alive

filename=test

您看到没有Content-Type标头。

然而,还有一个名为UploadValues的方法,它会使用NameValueCollection并将其内容转换为所需的x-www-form-urlencoded格式:

using(var wc= new WebClient())
{
       var nv = new System.Collections.Specialized.NameValueCollection();
       nv.Add("filename", "test");
       nv.Add("user", "bar");
       wc.UploadValues("http://stackoverflow.com/questions/ask", nv);
}

执行时,以下内容将发送至服务器:

POST /questions/ask HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Host: stackoverflow.com
Content-Length: 22
Expect: 100-continue

filename=test&user=bar

最后一个正文内容将导致填充的$_POST数组包含 filename user

调试这些请求时,请确保运行Fiddler,以便检查HTTP流量。