ASP.NET Core无法从正文中获取对象

时间:2017-08-16 11:20:59

标签: c# asp.net-core-2.0

代码:

[HttpPost("user/register")]
public IActionResult Register([FromBody] User user)
{
    if (user?.Name is null || user?.Password is null)
    {
        return BadRequest(new {message = "User is null and/or name and password are not provided"});
    }
    else
    {
         // Add to db
         return Json(user);
    }
}

用户类:

public class User
{
    public Guid Id { get; set; }
    public string Name { get; set; }
    public string Password { get; set; }
    public string Role { get; set; }
}

<小时/> 它应该基本上得到一个用户并将其添加到数据库中。我试着发送这个json:

{ "Name": "Batman", "Password": "IronmanSucks"}

应用程序捕获了请求,但用户对象为null。我也尝试过:

{ "user": { "Name": "Batman", "Password": "IronmanSucks"} }

但是根据这个documentation,第一个json应该运行良好。

这是postman中示例http请求的link   

<小时/> 这是否与标题有关,还是.NET Core 2.0中的错误?

3 个答案:

答案 0 :(得分:1)

只有当类型没有无参数构造函数时才会发生这种情况,因此可以通过添加这样来简单地修复它。

答案 1 :(得分:1)

我认为该模型即将失效,因此它为空。 您应该尝试在[BindNever]Role属性的User类中添加Guid属性,因为您还没有使用它们。

如果这不起作用,您可以尝试使用扩展类:

public class User
{
    public string Name { get; set; }
    public string Password { get; set; }
}

public class DataUser : User
{
    public Guid Id { get; set }
    public string Role { get; set; }
}

答案 2 :(得分:1)

如果您使用 MVC Core 而不是 MVC ,请确保添加 Json Formaters (来自 Microsoft.AspNetCore。 Mvc.Formatters.Json )。在 Startup.cs

public void ConfigureServices(IServiceCollection services)
{
    services
        .AddMvcCore()
        .AddJsonFormatters();
}

这可以帮助 [FromBody] 对您的帖子内容反序列化