【问题标题】:How do I update a custom property of an IdentityUser through api controller in ASP.NET Core?如何通过 ASP.NET Core 中的 api 控制器更新 IdentityUser 的自定义属性?
【发布时间】:2021-04-05 03:53:07
【问题描述】:

所以我正在开发一个 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 请求中得到更新,但地址仍然为空。

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

【问题讨论】:

  • 你能告诉我们一些课程吗?自定义用户、实体和您的 DbContext。

标签: asp.net api asp.net-core usermanager


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多