Перенаправление против RedirectToAction в Asp.NETCore

#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");