C# 为什么我从Web API控制器上的Post方法中获取空值?

C# 为什么我从Web API控制器上的Post方法中获取空值?,c#,asp.net-web-api2,C#,Asp.net Web Api2,我有一个非常简单的WebAPI类,它为我的Get方法返回JSON。我的发布方法是: // POST: api/Diff public void Post([FromBody]string value) { System.Diagnostics.Debug.WriteLine(value); } 我从控制台应用程序调用这两种方法: using (var client = new HttpClient()) {

我有一个非常简单的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);
使用(var-client=new-HttpClient())
{
//新代码:
client.BaseAddress=新Uri(“http://localhost:50541/");
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(新的MediaTypeWithQualityHeaderValue(“应用程序/json”);
//新代码:
httpresponsemessageresponse=wait client.GetAsync(“api/diff/1”);
if(响应。IsSuccessStatusCode)
{
var diff=await response.Content.ReadAsAsync();
Console.WriteLine(“{0}\t${1}”,不同文本,不同版本);
}
var blah=new Diff(){Text=“Gizmo”,Revision=999};
response=wait client.postsjsonasync(“api/diff”,等等);
Get调用有效。我在调试器中验证了
调用PostAsJson方法时,blah不为null。但是在API的post方法上的调试器中,值为null。

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

var blah = new Diff() { Text = "Gizmo", Revision = 999};
但是您的控制器希望在请求的主体中只有一个名为“value”的字符串:

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

public void Post([FromBody]Diff diff)

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

var blah = new Diff() { Text = "Gizmo", Revision = 999};
但是您的控制器希望在请求的主体中只有一个名为“value”的字符串:

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

public void Post([FromBody]Diff diff)

该方法需要一个
字符串

public void Post([FromBody]string value)
您将发送一个
Diff

var blah = new Diff() { Text = "Gizmo", Revision = 999};
response = await client.PostAsJsonAsync("api/diff", blah);
public void Post([FromBody]Diff value)
所以

或者将其更改为预期差异
Diff

var blah = new Diff() { Text = "Gizmo", Revision = 999};
response = await client.PostAsJsonAsync("api/diff", blah);
public void Post([FromBody]Diff value)
向其发送字符串:

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

该方法需要一个
字符串

public void Post([FromBody]string value)
您将发送一个
Diff

var blah = new Diff() { Text = "Gizmo", Revision = 999};
response = await client.PostAsJsonAsync("api/diff", blah);
public void Post([FromBody]Diff value)
所以

或者将其更改为预期差异
Diff

var blah = new Diff() { Text = "Gizmo", Revision = 999};
response = await client.PostAsJsonAsync("api/diff", blah);
public void Post([FromBody]Diff value)
向其发送字符串:

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