Как перенаправить в область после входа в asp.net core 3.0?

Я создал новую область под названием "Принципал", также я создал в этой области контроллер под названием "Принципал" и представление под названием index. Мне нужно показать это представление после входа пользователя в систему. Помогите, пожалуйста.

public async Task<IActionResult> OnPostAsync(string returnUrl = null)
{
    returnUrl = returnUrl ?? Url.Content("~/");

    if (ModelState.IsValid)
    {
        // This doesn't count login failures towards account lockout
        // To enable password failures to trigger account lockout, set lockoutOnFailure: true
        var result = await _signInManager.PasswordSignInAsync(Input.Email, Input.Password, Input.RememberMe, lockoutOnFailure: true);
        if (result.Succeeded)
        {
            _logger.LogInformation("User logged in.");
            return LocalRedirect(returnUrl);
        }
        if (result.RequiresTwoFactor)
        {
            return RedirectToPage("./LoginWith2fa", new { ReturnUrl = returnUrl, RememberMe = Input.RememberMe });
        }
        if (result.IsLockedOut)
        {
            _logger.LogWarning("User account locked out.");
            return RedirectToPage("./Lockout");
        }
        else
        {
            var user = await _userManager.FindByNameAsync(Input.Email);
            if (user == null)
            {
                ModelState.AddModelError(string.Empty, "Invalid UserName.");
            }
            else if (!await _userManager.CheckPasswordAsync(user, Input.Password))
            {
                ModelState.AddModelError(string.Empty, "Invalid Password.");
            }
            return Page();
        }
    }

Это контроллер

[Area("Principal")]
public class PrincipalController : Controller
{
    public IActionResult Index()
    {
        return View();
    }
}

введите здесь описание изображения


person Felipe Moreno    schedule 20.10.2019    source источник


Ответы (2)


Замените эту строку:

return LocalRedirect(returnUrl);

С участием :

return RedirectToAction("Index", "Principal", new { area = "Principal" });

Не забудьте добавить маршрут области, как показано здесь. Например :

endpoints.MapControllers();
endpoints.MapAreaControllerRoute(
    "Principal", "Principal",
    "Principal/{controller=Principal}/{action=Index}/{id?}");

Вы также можете изменить связанные методы входа в систему. Например, в OnPostAsync функции LoginWith2fa.cshtml.cs, если ваше приложение использует 2FA.

person Nan Yu    schedule 21.10.2019
comment
Спасибо, я прочитал руководство, последовал вашему совету и добавил папку с именем Principal в представления основной области; Работает. - person Felipe Moreno; 22.10.2019

Вы можете использовать RedirectToAction:

RedirectToAction("Your ActionName", "Your ControllerName");

В этом случае:

RedirectToAction("Index", "PrincipalController ");
person cancmrt    schedule 20.10.2019