【问题标题】:How do I POST a httpclient to a WEB API? (simple as possible way for my highscore table)如何将 httpclient 发布到 WEB API? (我的高分表尽可能简单)
【发布时间】:2013-06-18 22:08:42
【问题描述】:

我的 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);
        //}

【问题讨论】:

    标签: post asp.net-web-api httpclient


    【解决方案1】:

    要序列化对象,您需要 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;
    

    【讨论】:

    • 您知道任何链接或文档吗?或者也许需要几行序列化我的对象以便服务器 Web API 代码可以理解它?
    猜你喜欢
    • 2013-10-06
    • 1970-01-01
    • 1970-01-01
    • 2019-05-10
    • 1970-01-01
    • 2018-08-10
    • 1970-01-01
    • 1970-01-01
    • 2014-01-08
    相关资源
    最近更新 更多