简体   繁体   English

更新 AspNet Core Identity 的字段

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM