Skip to main content
 首页 » 编程设计

c#之为什么我从 Web API Controller 上的 Post 方法得到一个空值

2024年02月05日25wayfarer

我有一个非常简单的 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。

请您参考如下方法:

该方法需要一个字符串:

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" });