2015-10-16 72 views
1

我有一个非常简单的WebAPI类,它返回JSON为我的获取方法。我邮政方法是:为什么我从Web API控制器上的Post方法获取空值?

// 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); 

获取通话作品。我在调试器中验证了在调用PostAsJson方法之前等于不为空。但是,在API的post方法的调试器中,为空。

回答

2

的方法期待一个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}; 

但你的控制器预计,请求体只有一个字符串名称为“价值”:

public void Post([FromBody]string value) 

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

public void Post([FromBody]Diff diff) 
相关问题