ASP. NET MVC: вызов контроллера с другого контроллера - PullRequest
0 голосов
/ 22 января 2020

Я пишу веб-приложение с ASP.NET MVC, и я хотел бы вызвать контроллер с другого контроллера. Точнее, я хотел бы вызвать подпрограмму в контроллере входа, где я выполняю вход и выход из контроллера, где я позволяю обычному пользователю сменить свой пароль. Таким образом, я проверяю старый пароль (предоставленный пользователем в форме смены пароля).

Я пытался искать в методах inte rnet, чтобы изменить пароль пользователя (не администратора), но я не нашел ничего хорошего.

Спасибо.

1 Ответ

0 голосов
/ 02 апреля 2020

Я не вызывал контроллер с другого контроллера, вместо этого я вызвал свой контроллер администрирования пользователей AdminController из представления в контроллере HomeController (с помощью кнопки input).

Затем код моей процедуры EditByUser в AdminController был записан как:

        [HttpPost]
        [Authorize]
        public async Task<IActionResult> EditByUser(string email, string passwordnew, string passwordconf)
        {
            AppUser user = await userManager.FindByEmailAsync(email);
            if (user != null)
            {
                IdentityResult validEmail
                    = await userValidator.ValidateAsync(userManager, user);
                if (!validEmail.Succeeded)
                {
                    AddErrorsFromResult(validEmail);
                }                

                IdentityResult validPassnew = null;
                bool passNewEqPassConf = passwordconf == passwordnew;
                if (!passNewEqPassConf)
                {
                    ModelState.AddModelError("", "New Password not equal to Confirmation!");
                }
                if (!string.IsNullOrEmpty(passwordnew) && passNewEqPassConf)
                {
                    validPassnew
                        = await passwordValidator.ValidateAsync(userManager, user, passwordnew);
                    if (validPassnew.Succeeded)
                    {
                        user.PasswordHash = passwordHasher.HashPassword(user, passwordnew);
                    }
                    else
                    {
                        AddErrorsFromResult(validPassnew);
                    }
                }
                if (((validEmail.Succeeded && validPassnew == null)
                    || (validEmail.Succeeded
                        && passwordnew != string.Empty && validPassnew.Succeeded)) && passNewEqPassConf)
                {
                    IdentityResult result = await userManager.UpdateAsync(user);
                    if (result.Succeeded)
                    {
                        return RedirectToAction("Index", "Home", new { email = user.Email });
                    }
                    else
                    {
                        AddErrorsFromResult(result);
                    }
                }
            }
            else
            {
                ModelState.AddModelError("", "User not found!");
            }

            return View(user);
        }

Однако мне не удалось проверить старый пароль… Вход выполнен на другом контроллере…

...