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?!

Foi útil?

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 = ""} _    
)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top