Asp.net核心MVC post参数始终为null

时间:2016-07-19 10:29:23

标签: asp.net-mvc model-view-controller asp.net-core asp.net-web-api2 .net-core

我是MVC核心新手。

我创建了一个MVC核心项目,它有一个控制器。此控制器具有Get和Post操作方法。如果我使用查询字符串将数据传递给Get方法,它可以正常工作,但是当我将复杂的JSON传递给post方法时,它总是显示为null。

我正在做什么:

发布请求

URL: http://localhost:1001/api/users
Content-Type: application/json
Body: 
{
   "Name":"UserName",
   "Gender":"Gender of the user",
   "PhoneNumber":"PhoneNumber of the user"
}

这是Post动作方法

[HttpPost]
[Route("api/users")]
public async Task<IActionResult> Post([FromBody]User newUser)
{
   ...
}

当调用post请求时, newUser 总是显示null。如果我删除 [FromBody] 属性,那么我会收到newUser对象,但其所有字段都为空。

请帮助我并指导我解决这个问题。

EDITED

这是我的用户

public class User{

   public int Id { get; set; }
   public string Name { get; set; }
   public string Gender { get; set; }
   public string PhoneNumber { get; set; }
}

我为json数据做过与描述here相同的操作,但仍然接收null。

5 个答案:

答案 0 :(得分:13)

这可能是因为处理空值的方式。在AddJsonOptions中将NullValueHandling设置为Ignore,看看是否有效。

public void ConfigureServices(IServiceCollection services)
{
    services
        .AddMvc()
        .AddJsonOptions(jsonOptions=>
        {
            jsonOptions.SerializerSettings.NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore;
        });
}

答案 1 :(得分:10)

请注意原始方法Post([FromBody] User newUser)

对于谷歌未来的读者,如果方法为Post(User newUser)

,可能会出现同样的问题

请注意[FromBody]缺少。这与以前版本的MVC不同,这些参数通常推断

如果您是现有的 MVC5 开发者,他找到了关于 AspNetCore.MVC 的此页面,请务必仔细检查您是否已[FromBody]装饰相关的。

答案 2 :(得分:2)

我创建了新的ASP.NET Core项目,添加了您的功能,并且它可以工作。请在github上结帐this project

此外,请参阅浏览器控制台与此控制器进行简单通信的日志屏幕截图:Console output

答案 3 :(得分:0)

你在Microsoft.AspNetCore.Mvc 1.0.0吗?

如果您是,请尝试在请求中发送此对象作为您的身体(驼峰属性):

{
   "name":"UserName",
   "gender":"Gender of the user",
   "phoneNumber":"PhoneNumber of the user"
}

答案 4 :(得分:-6)

您的User类必须具有默认的无参数构造函数才能使其正常工作...