Как выставить пустое значение C #

Мне нужно поместить данные из приложения 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

Решение

Протокол 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
}
2

Другие решения

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

0

По вопросам рекламы [email protected]