【问题标题】:Update Fields of AspNet Core Identity更新 AspNet Core Identity 的字段
【发布时间】:2021-04-07 17:52:10
【问题描述】:

我正在尝试使用 UpdateAsync 方法使用 ASP.NET CORE WEB API 更新 AspNetUser 的某些字段。我尝试了以下但抛出错误,显示用户名不能为空。对于这种情况,我只想更新电话号码。

控制器

    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!");

    }

服务

  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)
        };

    }

在这里,我只想根据用户电子邮件/用户 ID 更新某些字段。

错误消息

{
"message": "Phone number didnot Updated!",
"isSuccess": false,
"errors": [
    "User name '' is invalid, can only contain letters or digits."
],
"expireDate": null

}

【问题讨论】:

  • 不要创建一个新的IdentityUser,使用var user中现有的一个
  • @CamiloTerevinto 谢谢它的工作。我很困惑是否使用身份对象。
  • @CamiloTerevinto 是否可以使用 CodeFirst 方法更新身份表的字段,请指导我对此的任何参考。
  • 这是一个完全不同的问题,我建议你先使用你最喜欢的搜索引擎
  • @MakeMeFly An example of adding new column。请小心,因为它会删除并重新创建您的数据库

标签: c# asp.net-core asp.net-core-identity


【解决方案1】:

当您创建IdentityUser 的新实例时,实体框架会尝试INSERT 这个用户,而不是UPDATE 它:

var identityUser = new IdentityUser
{
    PhoneNumber = model.PhoneNumber
}

所以这就是你得到错误的原因。要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);

【讨论】:

    猜你喜欢
    • 2017-05-11
    • 2018-06-11
    • 2019-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-22
    • 2020-04-25
    相关资源
    最近更新 更多