RedirectToAction не работает при отладке - PullRequest
0 голосов
/ 07 октября 2019

У меня есть форма входа в систему, к которой мой проект направляется, когда пользователь не аутентифицирован. Аутентификация кэшируется и проверяется при каждом действии. Если пользователь не аутентифицирован, он направляется обратно на экран входа в систему с routeUrl, пропущенным через URL. Если пользователь не прошел проверку подлинности при начальной загрузке, routeUrl имеет значение NULL, и я использую RedirectToAction для перехода к исходному сообщению, зарегистрированному на странице.

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

return RedirectToAction("Index", "Home", new { Area = "Client" });

выполнена. Но отладчик никогда не достигает моей точки останова, установленной в строке назначения контроллера Client / Home / Index. Я жду, и в конечном итоге время ожидания истекает.

На втором проходе с отладчиком аутентификация кэшируется, и проект направляет меня прямо в Client / Home / Index без проблем.

При развертыванииэто поведение отличается. Весь процесс входа в систему занимает около 90 секунд после нажатия кнопки, что не должно занять больше 5 секунд. Я пытаюсь отладить это, но, как уже говорилось ранее, после того, как мое действие входа в систему аутентифицирует и вызывает перенаправление, перенаправление не происходит. Браузер просто бездействует с вращением счетчика, и я не могу правильно отладить.

Вот код.

[HttpPost]
[AllowAnonymous]
//[ValidateAntiForgeryToken]
public async Task<ActionResult> Login(LoginViewModel model)
{
    if (!ModelState.IsValid)
    {
        return View(model);
    }

    var result = await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout: true);

    switch (result)
    {
        case SignInStatus.Success:
            return RedirectToLocal(model.ReturnUrl);

        case SignInStatus.LockedOut:
            return View("Lockout");

        case SignInStatus.RequiresVerification:
            return RedirectToAction("SendCode", new { ReturnUrl = model.ReturnUrl, RememberMe = model.RememberMe });

        case SignInStatus.Failure:
        default:
            ModelState.AddModelError("", "Invalid login attempt.");
            return View(model);
    }
}

Функция RedirectToLocal:

public ActionResult RedirectToLocal(string returnUrl)
{
    if (Url.IsLocalUrl(returnUrl))
    {
        return Redirect(returnUrl);
    }
    return RedirectToAction("Index", "Home", new { Area = "Client" });
}

Мой основной Индекс Home Controller Действие, которое работает при перенаправлении на ту же страницу, если пользователь уже аутентифицирован.

public ActionResult Index()
{
    return RedirectToAction("Index", "Home", new { Area = "Client" });
}

1 Ответ

0 голосов
/ 07 октября 2019

Если вы звоните Login () используя ajax post. Тогда RedirectToAction () не будет работать, вам нужно вернуть URL, а затем использовать JavaScript для перенаправления в это местоположение.

...