我需要将数据从C#WinForms应用程序发布到PHP页面。我正在将WebClient与以下示例代码一起使用:
using (WebClient client = new WebClient())
{
NameValueCollection values = new NameValueCollection();
values.Add("menu_parent", null);
string URL = "http://192.168.20.152/test.php";
byte[] response = client.UploadValues(URL, values);
string responseString = Encoding.Default.GetString(response);
MessageBox.Show(responseString);
}
在PHP方面,我正在执行简单的IF条件,以使用以下非常简化的代码测试menu_parent
是否为NULL:
<?php
$parent = $_POST['menu_parent'];
if ($parent === null)
echo "menu_parent is null";
else
echo "menu_parent is: <".$parent.">"; // This prints out.
if (is_null($parent))
echo "menu_parent is also null";
else
echo "menu_parent is also: <".$parent.">" // This also prints out.
if ($parent === "")
echo "menu_parent is empty string"; // This also prints out.
else
echo "menu_parent is not empty";
?>
问题是NULL
的{{1}}值在PHP页面中转换为空字符串。我已经检查了MSDN page about WebClient.UploadValues method和NameValueCollection class。该页面说menu_parent
值被接受。如何发布空值?在这种情况下NULL
的值是不可接受的吗?
答案 0 :(得分:2)
HTTP协议是文本协议,因此您不能真正发送“空”值。
假设您正在使用JSON.net库(尽管可能有等效的内置方法)。
using (WebClient client = new WebClient())
{
var values = new Dictionary<string,object> { { "menu_parent",null } };
var parameterJson = JsonConvert.SerializeObject(values);
client.Headers.Add("Content-Type", "application/json");
string URL = "http://192.168.20.152/test.php";
byte[] response = client.UploadData(URL, Encoding.UTF8.GetBytes(parameterJson));
string responseString = Encoding.Default.GetString(response);
MessageBox.Show(responseString);
}
然后在PHP中可以做到:
$data = json_decode(file_get_contents('php://input'));
if ($data->menu_parent === null) {
//should work
}
答案 1 :(得分:0)
在使用JsonConvert类反序列化序列化之后,我始终使用数据模型并将其作为C#中的对象发送。然后在PHP中,我总是将其作为对象,然后再次将其转换为相关模型。因此,没有NULL键值丢失。但是,我不知道“ NameValueCollection”在PHP(?)中具有相同的数据模型。