如何通过 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 中的默认控制器和操作?