2011-01-23 5 views
6

Json 문자열을 PHP 웹 서버에 게시 할 때 비정상적인 동작이 발생합니다. 나는 Json 문자열을 생성하기 위해 JsonTextWriter 객체를 사용한다. 그런 다음 Json 문자열을 POST 요청으로 보냅니다. 의견을 참조하십시오. 코드의 HTML 응답이 정확한 결과를 반환하지만 브라우저에서 볼 때 웹 페이지는 NULL 또는 array (0) {}를 표시합니다. 서버Json.NET을 사용하는 POST Json 문자열에서 원격 PHP 스크립트

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

"application/json"을 콘텐츠 유형으로 사용해보십시오. 또한 요청 본문에서 서버로 보내지는 것을 볼 수 있으면 요청 로그를 확인하거나 포트 80 추적을 수행하십시오.

일부 JSON을 PHP 서버로 보내는 빠른 JQuery ajax 함수를 작성하여 C# 코드 또는 PHP 코드가 문제가되는 범위를 좁힐 수도 있습니다. C# 코드에서 PHP 코드를 분리하면 PHP가 제대로 작동하는지 알 수 있습니다. 그렇다면 문제는 C# 코드에 있습니다.

+0

도움 주셔서 감사합니다. 우리는 이러한 디버깅 기술 중 일부를 시도하여 문제가 C#의 POST 인코딩과 관련이 있음을 확인했습니다. application/json을 사용하더라도 PHP에서 null 값을 얻습니다. urlencoding을 사용하여 문자열을 얻으면 작동합니다. – Russell

+0

@Russell - 정말 멋지다! 다행 이네. 이와 같은 문제를 해결하는 가장 좋은 방법은 깨진 구성 요소를 찾을 때까지 각 구성 요소를 분리하고 독립적으로 테스트하는 것입니다. – jmort253

관련 문제