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

Asp.net core MVC post parameter always null

我是 MVC 核心的新手。

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

这是我在做什么:

Post请求

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 对象,但它的所有字段都是空的。

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

已编辑

这是我的用户class

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 描述的相同的操作,但仍然收到空值。

你在Microsoft.AspNetCore.Mvc 1.0.0吗?

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

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

我创建了新的 ASP.NET 核心项目,添加了您的功能,并且它可以正常工作。请在 github 结账 this project

另外,从浏览器控制台查看与此控制器进行简单通信的日志截图:Console output

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

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

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

对于 google 的未来读者,如果方法是 Post(User newUser)

,同样的问题可能会出现

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

如果您是现有的 MVC5 开发人员并且发现此页面关于 AspNetCore.MVC,请务必仔细检查你有 [FromBody] 相关装饰。