2011-01-23 21 views
6

發佈一個JSON字符串到PHP Web服務器時,我遇到了一個不同尋常的怪異行爲。我使用JsonTextWriter對象來創建Json字符串。然後我發送Json字符串作爲POST請求。請看評論。在代碼中的HTML響應被返回正確的輸出,但在瀏覽器觀察時,網頁顯示NULL或陣列(0){}。在服務器上POST JSON字符串到遠程PHP腳本使用Json.NET

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端口的痕跡。

您也可以縮小問題的範圍 - 是它的C#代碼或PHP代碼這是很糟糕 - 通過編寫發送一些JSON到PHP服務器快速的JQuery AJAX功能。 PHP代碼與C#代碼的這種隔離將告訴您PHP是否至少能夠正常工作。如果是,那麼問題出在C#代碼中。

+0

謝謝您的幫助。我們嘗試了一些調試技術,並確定問題出在C#的POST編碼上。即使使用application/json,我們也會在PHP中獲得空值。如果我們通過urlencoding獲取字符串,它將起作用。 – Russell 2011-01-24 02:17:07

相關問題