Asp.net web api 调用从主体接收组合对象的ASP.net核心web api端点

Asp.net web api 调用从主体接收组合对象的ASP.net核心web api端点,asp.net-web-api,Asp.net Web Api,在我的asp.net web api上,我有以下端点,用于发布新用户并从body接收用户对象 // POST: api/Users [HttpPost] public async Task<IActionResult> PostUser([FromBody] User user) { if (!ModelState.IsValid) { return BadRequest(ModelState); } user.DateCreated

在我的asp.net web api上,我有以下端点,用于发布新用户并从body接收用户对象

// POST: api/Users
[HttpPost]
public async Task<IActionResult> PostUser([FromBody] User user)
{
    if (!ModelState.IsValid)
    {
        return BadRequest(ModelState);
    }

    user.DateCreated = DateTime.Now;
    //user.LastLogin = DateTime.Now;
    var hashedPassword = BCrypt.Net.BCrypt.HashPassword(user.Password);
    user.Password = hashedPassword;
    _context.User.Add(user);
    try
    {
        await _context.SaveChangesAsync();
    }
    catch (DbUpdateException ex)
    {
        if (UserExists(user.Id))
        {
            return new StatusCodeResult(StatusCodes.Status409Conflict);
        }
        else
        {
            Console.WriteLine(ex.Message);
        }
    }

    return CreatedAtAction("GetUser", new { id = user.Id }, user);
}
问题是:如何使用post端点创建新用户?如何将角色传递到用户对象?请注意,我可以创建新用户,并在role属性上传递null。现在我想传递一个现有角色

这是我通过邮递员和angular2应用程序传递的信息,但没有通过。返回201状态,但不保存

{
    "role": {
        "id": 1,
        "name": "Admin",
        "description": "Admin",
        "dateCreated": "2016-01-01T00:00:00",
        "lastUpdate": null
    },
    "firstName": "gggg",
    "lastName": "gggg",
    "emailAddress": "gggg",
    "userName": "ggg",
    "password": "$2a$10$z5dKRLqrus7i0fIluMynluJ8EOI2ko5vNGjBrBbfRaP738zHmc866",
    "dateCreated": "2016-08-16T21:24:18.144517+02:00",
    "lastLogin": null
}

我已经解决了这个问题。我通过主体传递的数据是正确的(模型状态是有效的),但有一个内部错误导致了我的实体框架核心。它试图重新创建附加到用户的角色,尽管该角色已经存在。

您要分配给该用户的角色是什么?这是客户发来的吗?怎样您如何调用此端点?从我的angular2应用程序中,我可以使用双向数据绑定从表单中字符串化值,并获得值{“FirstName”:“gggg”,“LastName”:“gggg”,“EmailAddress”:“gggggg”,“UserName”:“ggg”,“Password”:“ggg”,“Role”:“{”id“:1,“name”:“Admin”,“description”:“Admin”,“dateCreated”:“2016-01-01T00:00”,“lastUpdate”:null}}。但是api不接受这个对象,请看我在传递对象时没有使用Role属性。当我加入角色时,我做错了什么?
{
    "role": {
        "id": 1,
        "name": "Admin",
        "description": "Admin",
        "dateCreated": "2016-01-01T00:00:00",
        "lastUpdate": null
    },
    "firstName": "gggg",
    "lastName": "gggg",
    "emailAddress": "gggg",
    "userName": "ggg",
    "password": "$2a$10$z5dKRLqrus7i0fIluMynluJ8EOI2ko5vNGjBrBbfRaP738zHmc866",
    "dateCreated": "2016-08-16T21:24:18.144517+02:00",
    "lastLogin": null
}