如何发布NULL值C#

时间:2018-06-28 06:45:18

标签: c# php webclient namevaluecollection

我需要将数据从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 methodNameValueCollection class。该页面说menu_parent值被接受。如何发布空值?在这种情况下NULL的值是不可接受的吗?

2 个答案:

答案 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(?)中具有相同的数据模型。