[英]Update Fields of AspNet Core Identity
I am trying to update certain fields of AspNetUser using ASP.NET CORE WEB API using UpdateAsync method.我正在尝试使用 UpdateAsync 方法使用 ASP.NET CORE WEB API 更新 AspNetUser 的某些字段。 I tried the below but throws an error showing username can't be null.
我尝试了以下但抛出一个错误显示用户名不能为空。 For this case, i want to update phonenumber only.
对于这种情况,我只想更新电话号码。
Controller控制器
public async Task<IActionResult> UpdateUserAync([FromBody] RegisterViewModel model)
{
if (ModelState.IsValid)
{
var result = await _userService.UpdateUserAsync(model);
if (result.IsSuccess)
return Ok(result);
return BadRequest(result);
}
return BadRequest("Some Properties are not valid!");
}
Service服务
public async Task<UserUpdateResponse> UpdateUserAsync(RegisterViewModel model)
{
var user = await _userManager.FindByEmailAsync(model.Email);
var phoneNumber = await _userManager.GetPhoneNumberAsync(user);
if (user == null)
throw new NullReferenceException("Update model is null");
if (phoneNumber!=null)
return new UserUpdateResponse
{
Message = "Sorry you can't update!",
IsSuccess = false,
};
var identityUser = new IdentityUser
{
PhoneNumber = model.PhoneNumber
};
var result = await _userManager.UpdateAsync(identityUser);
if (result.Succeeded)
{
return new UserUpdateResponse
{
Message = "Phone number updated Successfully",
IsSuccess = true,
Errors = result.Errors.Select(e => e.Description)
};
}
return new UserUpdateResponse
{
Message = "Phone number didnot Updated!",
IsSuccess = false,
Errors = result.Errors.Select(e => e.Description)
};
}
Here, I only want to update certain fields based on user email/user id.在这里,我只想根据用户电子邮件/用户 ID 更新某些字段。
ErrorMSG错误消息
{
"message": "Phone number didnot Updated!",
"isSuccess": false,
"errors": [
"User name '' is invalid, can only contain letters or digits."
],
"expireDate": null
} }
Entity Framework tries to INSERT
this user, not UPDATE
it as you create a new instance of IdentityUser
: Entity Framework 尝试
INSERT
此用户,而不是在您创建IdentityUser
的新实例时UPDATE
它:
var identityUser = new IdentityUser
{
PhoneNumber = model.PhoneNumber
}
So this is the reason why you've got the error.所以这就是你得到错误的原因。 To
UPDATE
the user, you need update user
that you've found by FindByEmailAsync
method:要
UPDATE
用户,您需要更新您通过FindByEmailAsync
方法找到的user
:
// Get the existing user from the db
var user = await _userManager.FindByEmailAsync(model.Email);
// Update it with the values from the view model
user.Name = model.Name;
user.Surname = model.Surname;
user.UserName = model.UserName;
user.Email = model.Email;
user.PhoneNumber = model.PhoneNumber;
user.PasswordHash = checkUser.PasswordHash;
// Apply the changes
var result = await _userManager.UpdateAsync(user);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.