0

私の Windows Phone クライアントは、名前とスコアを表す JSON の一部を送信します...代わりに Web API のクラスを使用する必要がありますか? 生のjsonではなくオブジェクトをサーバーに送信するコードは何ですか?

 private void btnCreateSampleScore_Click(object sender, RoutedEventArgs e)
    {
        using (var client = new HttpClient())
        {
            client.BaseAddress = new Uri("http://punkoutersoftware.azurewebsites.net");

            var content = new FormUrlEncodedContent(new[] 
                                                   {
                                                       new KeyValuePair<string, string>("Bob", "2.65")
                                                   });

            var result = client.PostAsync("/api/DrunkMeterScore", content).Result;

            string resultContent = result.Content.ReadAsStringAsync().Result;
            Console.WriteLine(resultContent);

            //DrunkMeterScore dms = new DrunkMeterScore();
            //dms.Name = "Bob";
            //dms.Score = 2.42;
        }

    }

サーバーはプレーンな Web API テンプレートを使用しています

 // POST api/DrunkMeterScore
    public HttpResponseMessage PostDrunkMeterScore(DrunkMeterScore drunkmeterscore)
    {
        if (ModelState.IsValid)
        {
            db.DrunkMeterScores.Add(drunkmeterscore);
            db.SaveChanges();

            HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.Created, drunkmeterscore);
            response.Headers.Location = new Uri(Url.Link("DefaultApi", new { id = drunkmeterscore.DrunkMeterScoreId }));
            return response;
        }
        else
        {
            return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState);
        }
    }

編集1:

私はこれらの両方を試しました..それらは両方ともハングし、PostAsync 呼び出し中に戻ってこない:(

 var client = new HttpClient();
        client.BaseAddress = new Uri("http://punkoutersoftware.azurewebsites.net");

        client.DefaultRequestHeaders.Accept.Add(
            new MediaTypeWithQualityHeaderValue("application/json"));

        var score = new DrunkMeterScore() { Name = "Joe", Score = 2.67 };






        //MediaTypeFormatter jsonFormatter = new JsonMediaTypeFormatter();
        //HttpContent content = new ObjectContent<DrunkMeterScore>(score, jsonFormatter);
        //var resp = client.PostAsync("api/DrunkMeterScore", content).Result;






        //Uri scoreUri = null;
        //HttpResponseMessage response = client.PostAsJsonAsync("api/DrunkMeterScore", score).Result;
        //if (response.IsSuccessStatusCode)
        //{
        //    scoreUri = response.Headers.Location;
        //}
        //else
        //{
        //    Console.WriteLine("{0} ({1})", (int)response.StatusCode, response.ReasonPhrase);
        //}
4

1 に答える 1

6

オブジェクトをシリアル化するには、wp8 ではアルファ リリースとしてのみ利用可能な ObjectContent クラスが必要です。

パッケージコンソールを使用して、

インストール パッケージ Microsoft.AspNet.WebApi.Client -Pre

このようなものでなければなりません。私は記憶からこれをやったので、YMMV.

DrunkMeterScore dms = new DrunkMeterScore();
dms.Name = "Bob";
dms.Score = 2.42;
var content = new ObjectContent(dms, new JsonMediaTypeFormatter());

var result = client.PostAsync("/api/DrunkMeterScore", content).Result;
于 2013-06-18T22:31:07.677 に答える