如何通过 ASP.NET Core 中的 api 控制器更新 IdentityUser 的自定义属性?

问题描述

所以我正在开发一个 api 控制器,我有一个这样的更新方法

 [HttpPost("update")]
        public async Task<IActionResult> Update([FromBody] UpdateModel model)
        {
            if (!ModelState.IsValid)
            {
                return BadRequest(ModelState);
            }

            var user = _userManager.Users
                .Include(u => u.Address)
                .FirstOrDefault(u => u.UserName == model.Email);

            if (user == null)
            {
                return BadRequest(new {Message = "User doesn't exist"});
            }

            user.FirstName = model.FirstName;
            user.LastName = model.LastName;
            user.Address = model.Address;

            await _userManager.UpdateAsync(user);

            return Ok(new {Message = "User has been updated successfully"});
        }

当通过 api 调用新用户时,用户会得到更新,地址除外。

这是地址:

public class Address : Entity
{
    public string AddressLine { get; set; }
    public string PostalCode { get; set; }
    public string City { get; set; }
}

和更新模型:

    public class UpdateModel
    {
        [required]
        [MinLength(3)]
        public string FirstName { get; set; }

        [required]
        public string LastName { get; set; }
        
        [required]
        [EmailAddress]
        public string Email { get; set; }
        
        public Address Address { get; set; }
    }

我已经完成了适当的迁移,并尝试在用户变量上设置断点。在调用 updateAsync 之前,变量确实保存了一个地址。

用户的名字和姓氏都在 POST 请求中更新,但地址保持为空。

有人知道为什么会这样吗?

解决方法

我认为您在用户和地址之间设置了一对一的映射。因此,首先检查关系映射并仍然不起作用,然后尝试创建地址的新变量,然后将此新变量分配给 user.Address