3

投稿データ (json) を Web サーバーに送信しようとしています。これは非常に基本的なことですが、Windows 8 API ではすべてが複雑でなければなりません:/ Microsoft が提供するサンプルはまったく機能しませんhttp://code.msdn.microsoft.com/windowsapps/HttpClient-sample-55700664/sourcecode?fileId=50955&pathId = 797575364 scenerio 5 - サーバーに何かを送信していますが、送信すべきものはありません (文字列をストリームに変換しているときに問題が発生する可能性があります...)

            byte[] byteArray = Encoding.Unicode.GetBytes( data );
            MemoryStream stream = new MemoryStream( byteArray );
            StreamContent streamContent = new StreamContent(stream);

            HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, url);
            request.Content = streamContent;
            request.Headers.TransferEncodingChunked = true; 
            var httpClient = new HttpClient();

            HttpResponseMessage response = await httpClient.SendAsync(request);

            string responseString = await response.Content.ReadAsStringAsync();

しかし、私は別のアイデアを思いつき、この解決策は機能します (しかし...)

            var request = (HttpWebRequest)WebRequest.Create(url);
            request.ContentType = "application/json";
            request.Method = "POST";

            using (var requestStream = await request.GetRequestStreamAsync())
            {
                var writer = new StreamWriter(requestStream);
                writer.Write(data);
                writer.Flush();
            }

            using (var response = await request.GetResponseAsync()) 
            {
                using (var responseStream = response.GetResponseStream())
                {
                    var reader = new StreamReader(responseStream);
                    var answer = reader.ReadToEnd();
                    return answer;
                }
            }

前に述べたように、このソリューションには大きな欠点があります。サーバーの応答に http コード 422 が含まれ、アプリケーションがすぐにクラッシュする可能性があります。2番目のソリューションを使用してhttp応答コードを確認するにはどうすればよいですか? (でクラッシュするため、これが可能かどうかはわかりませんrequest.GetResponseAsync)

前もって感謝します :)

4

1 に答える 1

0

コードの本体をtry-catchブロックでラップWebExceptionし、不正な呼び出しを処理します。WebException.Statusリクエストが失敗した理由のステータスコードが含まれています。

var request = (HttpWebRequest)WebRequest.Create(url);
request.ContentType = "application/json";
request.Method = "POST";
try {
// Your code
}
 catch (WebException)
{ //error handling
}
于 2012-08-30T22:03:32.467 に答える