0

私は次のものを持っています。PHPで設定したAPIページに到達します...スポットオン。yum yum ... 問題ありません。

    public static async Task<string> GetData(string url, string data)
    {
        HttpClient client = new HttpClient();
        StringContent queryString = new StringContent(data);            

        HttpResponseMessage response = await client.PostAsync(new Uri(url), queryString);

        //response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
        response.EnsureSuccessStatusCode();
        string responseBody = await response.Content.ReadAsStringAsync();

        return responseBody;
    }

文字列データは実際には、さまざまなプロパティを持つオブジェクトの JSON.NET 表現です。私のPHPページで、これらのプロパティの1つ「ユーザー名」を見ています。では、次の情報を送信するとします。

public class PostContent
{
    public string username { get; set; }
}

PostContent data = new PostContent { username = "dooby" };

string json = JsonConvert.SerializeObject(postData);
return PostRequest.GetData(AuthURL, json);

PHP ページで、投稿データ $_POST["username"]... にリクエストを送信しましたが、レスポンスに何も返されません。正しいページにアクセスしていることを確認するためにランダムな文字列を出力すると、文字列が正しく取得されます。

ここに画像の説明を入力

したがって、POST データは通過しません...ここで何が間違っていますか?

4

2 に答える 2

0

あなたの質問はあまり明確に書かれていませんが、私が理解できることから、C#クライアントからPHPサーバーにJSONデータをPOSTしているように見えます.PHPコードは、リクエストを受信したときにリクエストからデータを読み取ることができませんクライアントから。それが問題ですか?

Content-Typeもしそうなら、サーバーにリクエストを行うときにヘッダーを設定していないことが問題であると思います。クラスドキュメントにStringContentよると、デフォルトのコンテンツ タイプはtext/plain. JSON データを送信しているため、コンテンツ タイプをapplication/json. サーバーは、送信しているデータの種類がわからない場合、データを正しく解析できない可能性があります。

queryString次のように変数を初期化してみてください。

StringContent queryString = new StringContent(data, Encoding.UTF8, "application/json");
于 2013-09-26T01:52:11.420 に答える
0

これは完全にトリックを行うように見えました。私は他の誰かのstackoverflowページでそれを見つけました:.NET:POSTをデータで送信して応答を読み取る最も簡単な方法

It works like a charm! I'll make this answer better when I get home

var pairs = new List<KeyValuePair<string, string>>
{
    new KeyValuePair<string, string>("postdataproperty", "blabla"),
    new KeyValuePair<string, string>("postdataproperty2", "blabla2"),
}

var content = new FormUrlEncodedContent( pairs );
于 2013-09-26T09:20:22.273 に答える