如何 POST NULL 值 C#

How to POST NULL value C#

我需要 POST 来自 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";
?>

问题是 menu_parentNULL 值在 PHP 页面中被转换为空字符串。我检查了 MSDN page about WebClient.UploadValues method and also NameValueCollection class。该页面表示接受 NULL 值。如何POST空值?在这种情况下 NULL 值是不可接受的吗?

我总是使用数据模型,并在使用 JsonConvert class 反序列化-序列化后将其作为对象发送到 C# 中。然后在 PHP 中,我总是将它作为对象获取并再次将其转换为相关模型。所以没有 NULL 键值丢失。但是 "NameValueCollection" 在 PHP(?) 中有相同的数据模型,我不知道。

HTTP 协议是文本协议,因此您不能真正发送 "null" 值。

假设您正在使用 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
}