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

Posted

技术标签:

【中文标题】如何通过 ASP.NET Core 中的 api 控制器更新 IdentityUser 的自定义属性?【英文标题】:How do I update a custom property of an IdentityUser through api controller in ASP.NET Core? 【发布时间】: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。 【参考方案1】:

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

【讨论】:

以上是关于如何通过 ASP.NET Core 中的 api 控制器更新 IdentityUser 的自定义属性?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ASP.NET Core Web API 中添加两个不同的令牌

EF Core 5.0 - 更新 ASP.NET Core Web API 中的多对多实体

如何将 AzureAD 和 AzureADBearer 添加到 asp.net core 2.2 web api

如何更改 ASP.NET Core API 中的默认控制器和操作?

ASP.NET Core Web API - 如何处理 URL 查询字符串中的“null”与“undefined”?

如何从 ASP.NET MVC 到 ASP.NET Core Web API 的 PUT?