Frage

Dies ist wahrscheinlich einer dieser einfachen Fragen .. Ich versuche, den Benutzer umgeleitet werden, nachdem sie erfolgreich authentifiziert haben, oder geben Sie sie auf die Anmeldeseite zurück. Aber die Erfolgsseite auf einem anderen Weg, und ich kann die Umleitung nicht zu funktionieren bekommen ..

Hier sind meine Routen in 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 = ""} _
    )

Ich habe 2-Controller bekommt: LoginController.vb und StuffController.vb. Die Views/Login/Index.aspx Datei enthält ein einfaches Formular mit dem Code:

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

Die LoginController enthält den folgenden Code:

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

    Return RedirectToRoute("Stuff")
End Function

Und die StuffController enthält folgende Komponenten:

Function Index()
    ' show stuff..

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

Hier ist, was ich versucht habe, so weit:

  • Funktion Authenticate ()
  • Funktion Authenticate () As Action ()
  • Funktion Authenticate () As RedirectToRouteResult ()

von denen alle verursachen eine Redirect Loop-Timeout im Browser. Was bin ich fehlt?!

War es hilfreich?

Lösung

Könnte es sein, dass Ihre Stuff Route hat genau die gleiche Form wie der Standard ein, so, wenn Sie anrufen

Return RedirectToRoute("Stuff");

die resultierende URL hat die Form: {Controller} / {Aktion} / {id}, z.B. Login / Authentifizieren wieder, da man innerhalb Login-Controllers Authentifizieren Aktion ist.

Versuchen Sie,

RedirectToAction("Index", "Stuff");

Ich hoffe, das hilft.

Andere Tipps

Die richtige Antwort ist gut, aber:

  • was ist, wenn Sie den Controller / Aktionsnamen von Mitarbeitern / Index, um etwas anderes zu ändern?

-dann müssen Sie die Werte ändern sich nicht nur in global.asax, sondern auch in allen Orten, wo Sie die Technik verwendet wird.

Mein Vorschlag:

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

Nun, in diesem Fall Sie sich nicht über die Namen der Controller / Aktion, die Stuff / Index entsprechend ist. Damit können Sie Änderungen leicht verwalten.

Ich kann nicht sehen, wo Sie das Authentifizierungscookie setzen oder Markieren der Benutzer in irgendeiner Weise authentifiziert wurde. Ist das in dem Code, den Sie ausgelassen haben?

Versuch

routes.MapRoute( _    
"Stuff", _
"",_  
New With {.controller = "Stuff", .action = "Index", .id = ""} _    
)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top