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

标签 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())
        {
            // 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" });

关于c# - 为什么我从 Web API Controller 上的 Post 方法得到一个空值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33170141/

相关文章:

c# - webapi2 owin,我无法启动项目

c# - 如何传递一个对象类型来调用泛型方法

c# - Web API - 返回 JSON 对象以及 HTTP 状态

c# - 如何用连续实例替换字符串?

c# - VALA 与 AOT 编译之间的性能差异?

authentication - 具有自定义身份验证的 Web API 2 OAuth 不记名 token

c# - Web API 2 REST 服务高级数据过滤

asp.net - 如何在 .net WebApi2 应用程序中使用 OAuth2 token 请求中的额外参数

c# - C#中如何对特殊字符进行转义

c# - 比较 DateTime 值是否为 "between"特定时间