5

この方法で文字列を Web サーバーに投稿しています。

private async Task makeRequest(string url, string postData)
    {
        HttpClient client = null;
        HttpResponseMessage response = null;
        try
        {
            client = new HttpClient();
            response = await client.PostAsync(url, new StringContent(postData));

            response.EnsureSuccessStatusCode();
            Debug.WriteLine(response.StatusCode + " " + response.ReasonPhrase);
        }
        catch (HttpRequestException e)
        {
            Debug.WriteLine(e.Message);
        }
    }

しかし、response.EnsureSuccessStatusCode();をスローしHttpRequestExceptionます。e.Message例外を実行すると、 : と表示されますResponse status code does not indicate success: 500 (Internal Server Error).

そのエラーが発生するのは何が間違っていますか? そして、どうすれば修正できますか?

4

5 に答える 5

4

賢明な人が言ったように、HTTP には魔法はありません。

Fiddler2をダウンロードし、エミュレーターに接続するためのプロキシーをセットアップします。次に、ヘッダーをどこかに保存してコードをHttpWebRequest実行し、 で再度実行しHttpClientます。

2 つのファイルを注意深く比較し、修正が必要なものを修正します。わずかな違いでも問題になる場合があることに注意してください。

于 2013-09-07T18:28:43.983 に答える
2

StringContent を POST すると、コンテンツ タイプが に設定されtext/plainます。サーバーがそれを好まないことに気付くかもしれません。サーバーが予期しているメディアの種類を調べてHeaders.ContentTypeStringContentインスタンスの を設定してください。

于 2013-09-07T17:28:00.400 に答える
1

application/x-www-form-urlencodedしばらく経ちましたが、コンテンツタイプで POST リクエストを送信する方法を探しているときに、この質問に出くわしました。

バージョン 2.2.28 の Microsoft.Net.Http には、FormUrlEncodedContentこのような要求を送信できるクラスが含まれています。

コード サンプルは次のようになります。

var client = new HttpClient();
var data = new Dictionary<String, String>
{
    { "firstname", "taj" },
    { "lastname", "burrow" }
};

var response = await client.PostAsync("http://mygreatapi.com", data);

好奇心旺盛な人のために、のコンストラクターFormUrlEncodedContentIEnumerable<KeyValuePair<String, String>>

于 2014-09-09T16:01:14.707 に答える