Отправьте строку Json в удаленный сценарий PHP с помощью Json.NET - PullRequest
6 голосов
/ 23 января 2011

Я сталкиваюсь с необычно странным поведением при размещении строки Json на веб-сервере PHP. Я использую объект JsonTextWriter для создания строки Json. Затем я отправляю строку Json как запрос POST. Пожалуйста, смотрите комментарии. Ответ HTML в коде возвращает правильный вывод, но при просмотре в браузере веб-страница отображает либо NULL, либо массив (0) {}.

private void HttpPost(string uri, string parameters)
{
WebRequest webRequest = WebRequest.Create(uri);
webRequest.ContentType = "application/x-www-form-urlencoded"; // <- Should this be "application/json" ?
webRequest.Method = "POST";
byte[] bytes = Encoding.UTF8.GetBytes(parameters);
string byteString = Encoding.UTF8.GetString(bytes);
Stream os = null;
try
{ // Send the Post Data 
    webRequest.ContentLength = bytes.Length;   
    os = webRequest.GetRequestStream();
    os.Write(bytes, 0, bytes.Length);    

    Console.WriteLine(String.Format(@"{0}", byteString));     // <- This matches the Json object
}
catch (WebException ex)
{ //Handle Error }

try
{ // Get the response
    WebResponse webResponse = webRequest.GetResponse();
    if (webResponse == null) { return null; }
    StreamReader sr = new StreamReader(webResponse.GetResponseStream());
    Console.WriteLine(sr.ReadToEnd().Trim());                // <- Server returns string response (full HTML page)
}
catch (WebException ex)
{ //Handle Error }
}  

Соответствующий код PHP на сервере:

$json = json_encode($_POST);   # Not 'standard way'
var_dump(json_decode($json));

Любые предложения будут с благодарностью.

Спасибо

1 Ответ

1 голос
/ 23 января 2011

Попробуйте использовать «application / json» в качестве типа контента.Кроме того, проверьте журналы запросов или, возможно, выполните трассировку порта 80, если вы можете просмотреть, что отправляется на сервер в теле запроса.

Вы также можете сузить сферу проблемы - это C #плохой код или код PHP - написав быструю функцию jjuery ajax, которая отправляет немного JSON на сервер PHP.Эта изоляция кода PHP от кода C # скажет вам, если PHP по крайней мере работает правильно.Если это так, то проблема в коде C #.

...