ASP.NET核心MVC POST参数始终为空怎么办?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (13)

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

请帮助我,并在这个问题上指导我。

这是我的用户

public class User{

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

我已经完成了与此处描述的json数据相同的操作,但仍然收到null。

提问于
用户回答回答于

这可能是由于如何处理空值。在AddJsonOptions中将NullValueHandling设置为忽略并查看是否有效。

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

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

对于谷歌未来的读者来说,如果方法是这样的话,也会出现同样的问题 Post(User newUser)

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

如果是现有的MVC5开发人员,他发现此页面与AspNetCore.MVC相关,请务必仔细检查是否[FromBody]在相关位置进行了装饰。

扫码关注云+社区