Как передать данные модели в контроллер после входа в систему Identity User? - PullRequest
0 голосов
/ 07 июля 2019

У меня есть проект Asp.Net Core 2.2 со скаффолдом Identity Razor.Когда попытка входа пользователя завершается успешно, мне нужно передать зарегистрированный идентификатор пользователя и электронную почту на контроллер перенаправления.Метод Login.cshtml.cs OnPost возвращает функцию LocalRedirect только для строкового параметра, и я не уверен, как передать модель или значения.

Как только пользователь вошел в систему, я получил полный объект пользователя, и я попытался использовать ViewBag, ViewData и TempData для передачи идентификатора и электронной почты на домашний контроллер.ViewBag не является частью страниц Razor, и с ViewData и TempData счет всегда равен 0, когда я проверяю точку останова, установленную в домашнем контроллере.Я могу добавить returnUrl, чтобы включить идентификатор и адрес электронной почты в виде строки запроса, но похоже, что я иду в неправильном направлении.

Это часть более крупного сценария, где я поддерживаю веб-сайт, который должен будет передавать свойства базовой модели каждому контроллеру.В конечном итоге я намерен, чтобы модели представления наследовали от базовой модели представления, для которой мне понадобятся значения идентификатора и электронной почты (в качестве упрощенного примера) для выполнения операций.Я думаю, что оптимальное решение позволит мне передать универсальную модель любому контроллеру, на который указывает retrnUrl.Этот проект представляет собой расширенное обновление по сравнению с проектом Asp.Net MVC, и Asp.Net Core является для меня немного новым.На данный момент моей основной задачей является передача параметров от функции Login OnPost к перенаправляющему контроллеру с правильным этикетом кодирования, который наилучшим образом соответствует подходу Asp.Net Core.

public async Task<IActionResult> OnPostAsync(string returnUrl = null)
        {
            if (ModelState.IsValid)
            {
                var result = await _signInManager.PasswordSignInAsync(Input.Email, Input.Password, Input.RememberMe, lockoutOnFailure: true);
                if (result.Succeeded)
                {
                    _logger.LogInformation("User logged in.");
                    var user = await _userManager.FindByEmailAsync(Input.Email);
                    //ViewData["UserID"] = user.Id;
                    //TempData["UserID"] = user.Id;

                    //returnUrl += returnUrl + "?userId=" + user.Id;
                    return LocalRedirect(returnUrl);
                }               
            }


public HomeController(UserManager<ApplicationUser> userManager, IConfiguration configuration)
        {
            string id = ViewData["UserID"] != null ? ViewData["UserID"].ToString() : "";
            //string id2 = TempData["UserID"] != null ? TempData["UserID"].ToString() : "";
            _userManager = userManager;
            _configuration = configuration;
        }

Помимо отсутствия уверенности в том, как передавать данные с моделью, ViewData и TempData всегда пусты.Я по крайней мере ожидал, что смогу использовать любой из них, но я думаю, что модель будет правильным использованием здесь.Может кто-нибудь предложить правильный подход для продолжения?

...