#c# #asp.net-core #asp.net-core-mvc
#c# #asp.net-core #asp.net-core-mvc
Вопрос:
Я изо всех сил пытаюсь понять, почему приведенный ниже код не будет работать
[HttpPost]
public async Task<IActionResult> Logout()
{
await _signInManager.SignOutAsync();
if (_signInManager.SignOutAsync().IsCompletedSuccessfully)
{
return Redirect("/Account/Login");
}
return View();
}
но приведенный ниже код работает:
[HttpPost]
public async Task<IActionResult> Logout()
{
await _signInManager.SignOutAsync();
if (_signInManager.SignOutAsync().IsCompletedSuccessfully)
{
return RedirectToAction("Login", "Account");
}
return View();
}
Кажется, что метод выхода из системы никогда не завершается, когда я использую метод перенаправления. Разве методы Redirect и RedirectToAction по сути не делают одно и то же?
Комментарии:
1. Что означает «не будет работать»? Вы не забыли добавить косую черту (/) к URL-адресу?
2. Попробуйте вернуть
Redirect("~/Account/Login");
3. вы должны сохранить результат
_signInManager.SignOutAsync();
, а затем использовать его вif
4. Они в конечном счете одинаковы, но это предполагает, что
/Account/Login
фактически разрешаетсяAccountController.Login
. Если это «не работает», это, вероятно, не тот случай.
Ответ №1:
Перенаправление перенаправит на URL-адрес и требует, чтобы вы указали полный URL
RedirectToAction позволяет перенаправить на действие в контроллере, передав ему имена действия и контроллера.
Если вы хотите перенаправить на веб-сайт, подобный www.youtube.com вам нужно использовать перенаправление.
В вашем примере это может не работать, потому что ваше перенаправление должно выглядеть следующим образом
return Redirect("~/Account/Login");