Я предлагаю изменить ваш запрос, следуя этому формату. Особенно обратите внимание на request.Method и request.ContentType, которые меня поймали несколько раз. Кроме того, обработка ответа легче этим способом.
try
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(YOURURL);
request.ContentType = "application/json; charset=utf8";
request.Headers.Add(ADD HEADER HERE IF YOU NEED ONE);
request.Method = WebRequestMethods.Http.Post; // IMPORTANT
using (var streamWriter = new StreamWriter(request.GetRequestStream()))
{
streamWriter.Write(JsonConvert.SerializeObject(JSONBODYSTRING));
// I USUALLY YOU JSONCONVERT HERE TO SIMPLY SERIALIZE A STRING CONTAINING THE JSON INFO.
//BUT I GUESS YOUR METHOD WOULD ALSO WORK
streamWriter.Flush();
streamWriter.Close();
}
WebResponse response = request.GetResponse();
using (var streamReader = new StreamReader(response.GetResponseStream()))
{
string result = streamReader.ReadToEnd();
// DO WHATEVER YOU'D LIKE HERE
}
} catch (Exception ex)
{
// HANDLE YOUR EXCEPTIONS
}
Из руководства PHP:
Преобразование строк к числам
, Когда строка оценена в числовом контексте, получающееся значение и тип определяются следующим образом.
строка будет оценена как плавание, если она будет содержать какой-либо из символов '.', 'e', или 'E'. Иначе это будет оценено как целое число.
значение дано начальной частью строки. Если строка запустится с допустимых числовых данных, то это будет используемым значением. Иначе значение будет 0 (нуль). Допустимые числовые данные являются дополнительным знаком, сопровождаемым одной или несколькими цифрами (дополнительно содержащий десятичную точку), сопровождаемый дополнительной экспонентой. Экспонента является 'e' или 'E', сопровождаемым одной или несколькими цифрами.
Преобразование типов с помощью == оператор
== оператор является свободно введенным сравнением. Это преобразует и в общий тип и сравнит их. Путем строки преобразовываются в целые числа, объяснены здесь .
то, Что происходит, - то, что строка преобразовывается в целое число и нечисловые строки (строки, которые не содержат или начинаются с числа), преобразовывают в 0
.
Числовой по сравнению с нечисловыми строками
строку А, которая состоит из числа или начинается с числа, рассматривают числовая строка . Если строка имеет другие символы после того числа, они проигнорированы.
, Если строка запускается с символа, который не может быть интерпретирован как часть числа, тогда это нечисловая строка и преобразует в 0
. Это не означает, что числовая строка должна запуститься с цифры (0-9) - например "-1"
, числовая строка, потому что знак "минус" является частью числа в этом случае.
Так, например, Ваша строка "d85d1d81b25614a3504a3d5601a9cb2e"
не запускается с числа, таким образом, она преобразовала бы в 0
. Но Ваша вторая строка "3581169b064f71be1630b321d3ca318f"
была бы преобразована в целое число 3581169
. Таким образом, вот почему Ваш второй тест не работает тот же путь.
, Что необходимо сделать
, Вы, вероятно, хотите:
if ($test1 === "0")
Уведомление, которому использование тройных равняется вместо двойного, равняется. Это гарантирует, что то, что Вы сравниваете, является строкой, которая содержит нуль цифры только и предотвращает любое преобразование типов.
После некоторого расследования оказывается, что aidan из руководства PHP упомянул, что любые строки, которые не запускаются с номера , будут преобразованы в 0, когда литой как целое число.
Это означает что:
("php" == 0) === true
("1php" == 0) === false
Очень раздражающий и не хорошо зарегистрированный. Это было в нижней части комментариев к странице сравнения типов.
$test1 = "d85d1d81b25614a3504a3d5601a9cb2e";
эта строка начинается с «d», что является недопустимым числом, переменная будет преобразована в 0, и ваш тест # 1 пройдет.
$test2 = "3581169b064f71be1630b321d3ca318f";
эта строка начинается с 3581169, который является допустимым числом, поэтому переменная будет преобразована в значение, которое не равно 0. Таким образом, ваш тест № 2 не пройдет.