Asp.net Asp net core 2.2,更新usename不起作用

Asp.net Asp net core 2.2,更新usename不起作用,asp.net,asp.net-identity,Asp.net,Asp.net Identity,我希望我的用户能够更改其用户名,因此我做了以下操作: <form asp-action="UpdateUserProfile" asp-controller="Account" method="post"> <div class="account-details-item"> <h2 class="center-text text-left account-details-item-title

我希望我的用户能够更改其用户名,因此我做了以下操作:

        <form asp-action="UpdateUserProfile" asp-controller="Account" method="post">

            <div class="account-details-item">
                <h2 class="center-text text-left account-details-item-title">UserName:</h2>
                <input name="username" id="username-text" readonly="readonly" class="center-text account-details-item-value" asp-for="User.UserName" value=@Model.User.UserName>
                <a id="btn-username" class="account-details-item-btn" >Edit</a>
            </div>
            <div class="account-details-item">
                <h2 class="center-text text-left account-details-item-title">Email:</h2>
                <input name="email" readonly="readonly" id="email-text" class="center-text account-details-item-value email" asp-for="User.Email" value=@Model.User.Email />
                <a id="btn-email" class="account-details-item-btn" >Edit</a>
            </div>
            <div class="account-details-item">
                <h2 class="center-text text-left account-details-item-title">Phone number:</h2>
                <input name="phonenumber" readonly="readonly" id="phone-text" class="center-text account-details-item-value" asp-for="User.PhoneNumber" value=@Model.User.PhoneNumber>
                <a id="btn-phone" class="account-details-item-btn" >Edit</a>
            </div>
            <div class="btns-container">
                <div class="btn-item"><a asp-action="Index" asp-controller="Cart" asp-route-id=@Model.User.CartId>Go To Cart</a></div>
                <div id="save-btn" class="btn-item"><button type="submit">Save Changes</button></div>
            </div>
        </form>
服务类中:

        [HttpPost]
        public IActionResult UpdateUserProfile()
        {
            var username = Request.Form["username"];
            var phonenumber = Request.Form["phonenumber"];
            var email = Request.Form["email"];
            var user = _userService.GetUser(User);



            if(`enter code here`IsUsernameDiffrent(username))
            {
                _userService.UpdateUsername(User, username);

                _userManager.UpdateAsync(user.Result);
            }
            else if(IsEmailDiffrent(email))
            {
                _userService.UpdateEmail(User, email);
                _userManager.UpdateAsync(user.Result);

            }
            else if (IsPhoneNumberDiffrent(phonenumber))
            {
                _userService.UpdatePhoneNumber(User, phonenumber);
                _userManager.UpdateAsync(user.Result);

            }

            return RedirectToAction("Index");
        }
   public async void UpdateUsername(ClaimsPrincipal user, string newUsername)
        {
            var currentUser = await GetUser(user);

            currentUser.UserName = newUsername;

            _dbContext.SaveChanges();
        }
问题是,如果用户更改用户名,他仍然必须使用旧用户名登录,
数据库中进行了更改,但每当我尝试使用新用户名登录时,它都会显示“无效登录尝试”

我觉得必须查看更多代码来分析问题。但是,当您对数据库中的数据进行更新或删除等更改时,请确保您在服务中使用了事务作用域

使用此技术将确保代码的一致性。除非范围内的一切都成功,否则不会对数据库进行更改。例如,如果您正在更新然后删除,那么在删除时会发生错误。然后,您的数据将在数据库中更新,但不会被删除。这是为了确保这两种情况都能成功发生,或者什么都不发生

请参阅此链接。

我的项目中有一个更新用户操作,它在我的项目中确实起作用,它与你的略有不同,但你可以尝试这样更改它:

[HttpPost]
public async Task<IActionResult> UpdateUserProfile()
{
     var user = _userService.GetUser(User);

     if (user == null)
     {
         return StatusCode(404);
     }

     var username = Request.Form["username"];

     if(IsUsernameDifferent(username))
     {
         user.UserName = username;   

         var result = await _userManager.UpdateAsync(user);

         if (result.Succeeded)
         {
            return RedirectToAction("Action", "Controller");
         }

         return View();
     }
     return View();
}
[HttpPost]
公共异步任务UpdateUserProfile()
{
var user=\u userService.GetUser(用户);
if(user==null)
{
返回状态码(404);
}
var username=Request.Form[“username”];
如果(IsUserName不同(用户名))
{
user.UserName=用户名;
var result=await\u userManager.UpdateAsync(用户);
if(result.successed)
{
返回重定向到操作(“操作”、“控制器”);
}
返回视图();
}
返回视图();
}

如果您确认新用户名已正确传递并写入数据库,则您发布的代码似乎没有问题。我将在使用新用户名登录时进行调试,并查看它在数据库中的何处检查身份验证,以查看新用户名失败的原因。