如何将httpclient发布到WEB API?(我的高分榜的简单方法)

pun*_*ter 0 post httpclient asp.net-web-api

我的Windows Phone客户端发送一段代表名称和分数的JSON ......我应该使用Web API中的Class吗?将对象发送到服务器而不是原始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;
        }

    }
Run Code Online (Sandbox Code Playgroud)

服务器正在使用纯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);
        }
    }
Run Code Online (Sandbox Code Playgroud)

EDIT1:

我尝试了这两个..他们都挂了,永远不会回来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);
        //}
Run Code Online (Sandbox Code Playgroud)

Dar*_*ler 6

要序列化对象,您需要ObjectContent类,对于wp8,该类仅作为alpha版本提供.

使用包控制台来做,

安装包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;
Run Code Online (Sandbox Code Playgroud)