2011-01-23 13 views
6

Json文字列をPHP Webサーバーにポストするときに異常な動作が発生しました。私はJsonTextWriterオブジェクトを使用してJson文字列を作成します。私はその後、POSTリクエストとしてJson文字列を送信します。コメントを見てください。コード内のHTML応答が正しい出力を返していますが、ブラウザで表示すると、WebページにはNULLまたは配列(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のトレースを実行することもできます。

PHPのサーバーにJSONを送信するクイックJQuery ajax関数を記述することで、問題の範囲を狭めることもできます(C#コードまたはPHPコードが悪いですか)。このようにPHPコードをC#コードから分離することで、PHPが少なくとも正しく動作しているかどうかがわかります。そうであれば、問題はC#コードにあります。

+0

ありがとうございました。これらのデバッグ手法のいくつかを試してみましたが、問題はC#のPOSTエンコーディングであると判断しました。アプリケーション/ jsonの場合でも、PHPではnull値を取得します。 urlencodingで文字列を取得すると、それは動作します。 – Russell

+0

@Russell - それは最高です!あなたはそれを把握してうれしい!このような問題を解決する最善の方法は、壊れたコンポーネントが見つかるまで、各コンポーネントを分解して独立してテストすることです。 – jmort253

関連する問題