Question

C’est probablement une de ces questions faciles. J’essaie de rediriger l’utilisateur après s’être authentifié avec succès, ou de le renvoyer à la page de connexion. Mais la page de réussite se trouve sur un autre itinéraire et je ne parviens pas à faire fonctionner la redirection.

Voici mes itinéraires dans 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 = ""} _
    )

J'ai 2 contrôleurs: LoginController.vb et StuffController.vb . Le fichier Views / Login / Index.aspx contient un formulaire simple avec le code:

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

Le LoginController contient le code suivant:

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

    Return RedirectToRoute("Stuff")
End Function

Et le StuffController contient les éléments suivants:

Function Index()
    ' show stuff..

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

Voici ce que j'ai essayé jusqu'à présent:

  • Fonction Authenticate ()
  • Fonction Authenticate () As ActionResult ()
  • Fonction Authenticate () As RedirectToRouteResult ()

tous provoquent un délai de boucle de redirection dans le navigateur. Qu'est-ce qui me manque?!

Était-ce utile?

La solution

Peut-être que votre itinéraire Stuff a exactement le même formulaire que celui par défaut, donc lorsque vous appelez

Return RedirectToRoute("Stuff");

l'URL résultante a la forme: {contrôleur} / {action} / {id}, par exemple. Reconnectez-vous / authentifiez-vous à nouveau, car vous vous trouvez dans l'action Authentifier du contrôleur de connexion.

Essayez de

RedirectToAction("Index", "Stuff");

L’espoir que cela aide.

Autres conseils

La réponse correcte est bonne, mais:

  • Et si vous vouliez un jour changer le nom du contrôleur / action de Staff / Index à autre chose?

- vous devrez ensuite modifier les valeurs non seulement dans global.asax, mais également à tous les endroits où vous avez utilisé la technique.

Ma suggestion:

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

Maintenant, dans ce cas, vous ne transmettez pas les noms de contrôleur / action qui sont Stuff / Index en conséquence. Cela vous permettra de gérer facilement les changements.

Je ne vois pas où vous configurez le cookie d'authentification ou marquez l'utilisateur comme ayant été authentifié de quelque manière que ce soit. Est-ce dans le code que vous avez omis?

essayer

routes.MapRoute( _    
"Stuff", _
"",_  
New With {.controller = "Stuff", .action = "Index", .id = ""} _    
)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top