Как выставить пустое значение C # - PullRequest
0 голосов
/ 28 июня 2018

Мне нужно отправить данные из приложения 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 значение menu_parent преобразуется в пустую строку на странице PHP. Я проверил MSDN страницу о методе WebClient.UploadValues ​​, а также NameValueCollection class . На странице сказано, что NULL значение принято. Как выставить нулевое значение? Является ли значение NULL неприемлемым в этом случае?

Ответы [ 2 ]

0 голосов
/ 28 июня 2018

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
}
0 голосов
/ 28 июня 2018

Я всегда использую модель данных и отправляю ее как объект в C # после десериализации-сериализации с классом JsonConvert. Затем в PHP я всегда получаю его как объект и снова конвертирую в связанную модель. Таким образом, нет потери значения ключа NULL. Но «NameValueCollection» имеет равную модель данных в PHP (?), Я не знаю.

...