ASP.Net MVC - redirecionamento para rotear dá Redirect loop
-
04-07-2019 - |
Pergunta
Esta é provavelmente uma daquelas perguntas fáceis .. Eu estou tentando redirecionar o usuário depois de terem autenticado com êxito, ou devolvê-los de volta para a página de login. Mas a página Sucesso está em uma rota diferente e eu não posso obter o redirecionamento para o trabalho ..
Aqui estão as minhas rotas em Globals.asax:
routes.MapRoute( _
"Default", _
"{controller}/{action}/{id}", _
New With {.controller = "Login", .action = "Index", .id = ""} _
)
routes.MapRoute( _
"Stuff", _
"{controller}/{action}/{id}", _
New With {.controller = "Stuff", .action = "Index", .id = ""} _
)
Eu tenho 2 controladores: LoginController.vb
e StuffController.vb
. O arquivo Views/Login/Index.aspx
contém um formulário simples com o código:
<form method="post" action="/Login/Authenticate">
O LoginController
contém o seguinte código:
Function Authenticate() As RedirectToRouteResult
' authentication code commented out ;o)
Return RedirectToRoute("Stuff")
End Function
E o StuffController contém o seguinte:
Function Index()
' show stuff..
Return View() ' return /Views/Stuff/Index.aspx
End Function
Aqui está o que eu tentei até agora:
- Função autenticação ()
- Função Authenticate () As ActionResult ()
- Função Authenticate () As RedirectToRouteResult ()
todos os quais causar um tempo limite Redirect loop no navegador. O que eu estou ausente?!
Solução
Será que o seu percurso material tem exatamente a mesma forma como o padrão, assim quando você chamar
Return RedirectToRoute("Stuff");
o URL resultante tem a forma: {controlador} / {ação} / {id}, por exemplo, Login / Autenticação de novo, uma vez que você está dentro ação Authenticate do Login-controlador.
Tente
RedirectToAction("Index", "Stuff");
Espero que ajude.
Outras dicas
A resposta correta é bom, mas:
- E se você quiser mudar o nome do controlador / ação do Staff / Index para outra coisa?
-então você precisará alterar os valores não só no global, mas também em todos os lugares onde você usou a técnica.
A minha sugestão:
return RedirectToRoute("Stuff", (RouteTable.Routes["Stuff"] as Route).Defaults);
Agora, neste caso, você não passar os nomes de controle / ação que é material / Index conformidade. Isso permitirá que você gerenciar as mudanças com facilidade.
Não consigo ver onde você está definindo o cookie de autenticação ou marcando o usuário como tendo sido autenticado de qualquer forma. É que no código que você tenha omitido?
try
routes.MapRoute( _
"Stuff", _
"",_
New With {.controller = "Stuff", .action = "Index", .id = ""} _
)