0

同期メソッドを使用して他の場所で正常に作成した (最後に貼り付けた) HTTPWebRequest を再構築しようとしている WP7 アプリがありますが、これは WP7 では機能しません。これらのメソッドのバージョン。

この問題は、Compact Framework の動作しないコードが bytearray[] しか送信できないという事実に起因すると考えています。json 文字列を送信するオプションはありません。動作するコードで bytearray を送信すると、そこでもエラーが発生します。別のオプションはありますか?

これが私のコードです-これは機能しません。最後のメソッドの 2 行目 - "Using(var respons ...)" で例外がスローされます。

public void CreateUser()
    {
        var request = (HttpWebRequest)WebRequest.Create("http://staging.cloudapp.net:8080/api/users/");
        request.Method = "POST";
        request.ContentType = "text/json; charset=utf-8";
        request.BeginGetRequestStream(new AsyncCallback(RequestCallback), request);
    }

    private static void RequestCallback(IAsyncResult result)
    {
        HttpWebRequest request = (HttpWebRequest)result.AsyncState;

        using (Stream postStream = request.EndGetRequestStream(result))
        {
            User user = new User("Windows", "Phone", "USCA");

            Formatting formatting = new Formatting();
            JsonSerializerSettings settings = new JsonSerializerSettings();
            settings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
            string json = JsonConvert.SerializeObject(user, formatting, settings);

            byte[] byteArray = Encoding.UTF8.GetBytes(json);

            postStream.Write(byteArray, 0, json.Length);
        }

        request.BeginGetResponse(new AsyncCallback(ResponseCallback), request);
    }

    private static void ResponseCallback(IAsyncResult result)
    {
        var request = (HttpWebRequest)result.AsyncState;
        using (var response = (HttpWebResponse)request.EndGetResponse(result))
        {

            using (Stream streamResponse = response.GetResponseStream())
            {
                StreamReader reader = new StreamReader(streamResponse);
                string responseString = reader.ReadToEnd();
                reader.Close();
            }
        }
    }

このコードは動作します (同じリクエストの非コンパクト フレームワーク バージョン):

HttpWebRequest request = HttpWebRequest.Create("http://staging.cloudapp.net/api/users/") as HttpWebRequest;
        request.Method = "POST";
        request.ContentType = "text/json";
        using (var writer = new StreamWriter(request.GetRequestStream()))
        {
            User user = new user("Other", "Guy", "USWC");
            Formatting formatting = new Formatting();
            JsonSerializerSettings settings = new JsonSerializerSettings();
            settings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
            string json = JsonConvert.SerializeObject(user, formatting, settings);

            writer.Write(json);
        }

        var response = request.GetResponse() as HttpWebResponse;
        using (var reader = new StreamReader(response.GetResponseStream()))
        {
            var responseText = reader.ReadToEnd();
            return responseText;
        }

助けてくれてありがとう!

4

3 に答える 3

1

現在行っているように、JSONに7ビット以外のASCII文字が含まれていますか?

byte[] byteArray = Encoding.UTF8.GetBytes(json);

postStream.Write(byteArray, 0, json.Length);

バイト数は文字列の文字数と同じではない可能性があり、不正な形式のリクエストにつながる可能性があります。

Fiddlerのようなものを使用して、エミュレーターまたは電話から実際にネットワーク上で何が行われているのかを確認することは価値があります(これを行う方法については、FiddlerのWebサイトに説明があります)。

于 2012-08-15T11:38:08.520 に答える
1

サーバーが「404 not found」で応答しているようです。要求しているリソースはサーバーに存在しますか?

于 2012-08-11T05:28:59.617 に答える
0

ええと、なぜこの問題が解消されたのかわかりません。@RowlandShawの提案は気に入りましたが、実際にはjsonで何も変更しませんでした。より良い解決策を提供できれば幸いです。

于 2012-09-01T23:13:02.583 に答える