Pregunta

Esta es probablemente una de esas preguntas fáciles. Estoy tratando de redirigir al usuario después de que se haya autenticado con éxito, o regresar a la página de inicio de sesión. Pero la página de éxito está en una ruta diferente y no puedo hacer que la redirección funcione.

Aquí están mis rutas en 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 = ""} _
    )

Tengo 2 controladores: LoginController.vb y StuffController.vb . El archivo Views / Login / Index.aspx contiene un formulario sencillo con el código:

<form method="post" action="/Login/Authenticate">

El LoginController contiene el siguiente código:

Function Authenticate() As RedirectToRouteResult
    ' authentication code commented out  ;o)

    Return RedirectToRoute("Stuff")
End Function

Y el StuffController contiene lo siguiente:

Function Index()
    ' show stuff..

    Return View()    ' return /Views/Stuff/Index.aspx
End Function

Esto es lo que he intentado hasta ahora:

  • Función de autenticación ()
  • Función de autenticación () como ActionResult ()
  • Función de autenticación () como RedirectToRouteResult ()

todo lo cual causa un tiempo de espera de bucle de redirección en el navegador. ¡¿Qué me estoy perdiendo ?!

¿Fue útil?

Solución

Podría ser que tu ruta de Stuff tenga exactamente la misma forma que la predeterminada, por lo que cuando llamas

Return RedirectToRoute("Stuff");

la url resultante tiene la forma: {controlador} / {acción} / {id}, por ejemplo. Inicie sesión / Autentíquese nuevamente, ya que está dentro de la acción Autenticar del controlador de inicio de sesión.

Intenta hacerlo

RedirectToAction("Index", "Stuff");

Espero que ayude.

Otros consejos

La respuesta correcta es buena, pero:

  • ¿qué sucede si alguna vez desea cambiar el nombre del controlador / acción de Personal / Índice a otra cosa?

-Entonces tendrá que cambiar los valores no solo en global.asax, sino también en todos los lugares donde utilizó la técnica.

Mi sugerencia:

return RedirectToRoute("Stuff", (RouteTable.Routes["Stuff"] as Route).Defaults);

Ahora, en este caso, no pasa los nombres del controlador / acción que es Stuff / Index en consecuencia. Esto te permitirá administrar los cambios fácilmente.

No veo dónde está configurando la cookie de autenticación o marcando al usuario como autenticado de alguna manera. ¿Está en el código que has omitido?

prueba

routes.MapRoute( _    
"Stuff", _
"",_  
New With {.controller = "Stuff", .action = "Index", .id = ""} _    
)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top