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));
任意の提案をいただければ幸いです。
ありがとうございました
ありがとうございました。これらのデバッグ手法のいくつかを試してみましたが、問題はC#のPOSTエンコーディングであると判断しました。アプリケーション/ jsonの場合でも、PHPではnull値を取得します。 urlencodingで文字列を取得すると、それは動作します。 – Russell
@Russell - それは最高です!あなたはそれを把握してうれしい!このような問題を解決する最善の方法は、壊れたコンポーネントが見つかるまで、各コンポーネントを分解して独立してテストすることです。 – jmort253