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]
相关装饰。
我是 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]
相关装饰。