【问题标题】:Why am I getting a null value from the Post method on a Web API Controller?为什么我从 Web API 控制器上的 Post 方法获得空值?
【发布时间】:2015-10-16 20:16:39
【问题描述】:

我有一个非常简单的 WebAPI 类,它为我的 Get 方法返回 JSON。我的发布方法是:

    // POST: api/Diff
    public void Post([FromBody]string value)
    {
        System.Diagnostics.Debug.WriteLine(value);
    }

我正在从控制台应用程序调用这两种方法:

        using (var client = new HttpClient())
        {
            // New code:
            client.BaseAddress = new Uri("http://localhost:50541/");
            client.DefaultRequestHeaders.Accept.Clear();
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

            // New code:
            HttpResponseMessage response = await client.GetAsync("api/diff/1");
            if (response.IsSuccessStatusCode)
            {
                var diff = await response.Content.ReadAsAsync<Diff>();
                Console.WriteLine("{0}\t${1}", diff.Text, diff.Revision);
            }

            var blah = new Diff() { Text = "Gizmo", Revision = 999};
            response = await client.PostAsJsonAsync("api/diff", blah);

Get 调用有效。我在调试器中验证了之前 PostAsJson 方法被称为 blah 不为空。但是在 API 的 post 方法的调试器中,value 为 null。

【问题讨论】:

    标签: c# asp.net-web-api2


    【解决方案1】:

    该方法需要一个string:

    public void Post([FromBody]string value)
    

    而你正在向它发送Diff

    var blah = new Diff() { Text = "Gizmo", Revision = 999};
    response = await client.PostAsJsonAsync("api/diff", blah);
    

    所以...

    要么将其更改为期待Diff

    public void Post([FromBody]Diff value)
    

    或者给它发送一个字符串:

    response = await client.PostAsJsonAsync("api/diff", new { value = "some string" });
    

    【讨论】:

      【解决方案2】:

      你向控制器发送一个复杂的对象:

      var blah = new Diff() { Text = "Gizmo", Revision = 999};
      

      但是您的控制器希望在请求的正文中只有一个名为“value”的字符串:

      public void Post([FromBody]string value)
      

      一种可能的解决方案是将Post方法的参数改为Diff对象:

      public void Post([FromBody]Diff diff)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-11-19
        • 1970-01-01
        • 1970-01-01
        • 2020-09-01
        • 2015-08-07
        • 2018-02-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多