2008-10-26 11 views
5

Dies ist wahrscheinlich eine dieser einfachen Fragen .. Ich versuche, den Benutzer umleiten, nachdem sie erfolgreich authentifiziert wurden, oder sie zurück auf die Anmeldeseite. Aber der Erfolg Seite ist auf einem anderen Weg, und ich kann die Umleitung nicht zu funktionieren bekommen ..ASP.Net MVC - Umleiten zu Route gibt Redirect Loop

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 = ""} _ 
    ) 

I 2 Controller haben: 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 Bisher versucht:

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

alle eine Redirect-Timeout-Schleife im Browser führen. Was vermisse ich?!

+0

Große Frage, ich hatte das gleiche Problem! – MrBoJangles

Antwort

7

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

Return RedirectToRoute("Stuff"); 

die resultierende URL-Aufruf hat die Form: {Controller}/{Aktion}/{id} , z.B Anmelden/Authentifizieren erneut, da Sie sich in der Authentifizierungsaktion des Login-Controllers befinden.

Versuchen Sie,

RedirectToAction("Index", "Stuff"); 

Hoffnung, das hilft.

+0

wieder richtig. Ich habe die 'Stuff'-Route entfernt und die RedirectToAction ("[View]", "[Controller]") benutzt und es funktioniert - Danke für Ihre Hilfe: o) – Andrew

+0

Oh, und ich musste den Rückgabetyp des Authenticate ändern Funktion zu "ActionResult" auch: o) – Andrew

0

Ich sehe nicht, wo Sie das Authentifizierungs-Cookie setzen oder den Benutzer als authentifiziert markieren. Ist das in dem Code, den Sie weggelassen haben?

+0

Ja, ich könnte mich irren, aber ich hätte nicht gedacht, dass ich irgendeinen Authentifizierungscode benötige, da alles, was ich hier wirklich versuche, Controller ist - vom LoginController zum StuffController – Andrew

+0

Wenn Sie das nicht einstellen autorisiert cookie, sofern Ihre Aktionsmethoden mit dem [Authorize] -Attribut versehen sind, werden Sie dann wieder zu Ihrer Login-URL weitergeleitet. – liggett78

+0

Vielen Dank für den Hinweis zum Attribut [Autorisieren]. Die Wahrheit ist, als ich versuchte, das zu bekommen, hatte ich den Autorisierungscode nicht geschrieben, also hatte ich keine Aktionsmethoden mit [Authorize] dekoriert - ich hatte gerade den "Flow", um mit zu beginnen: o) – Andrew

0

versuchen

routes.MapRoute(_  
"Stuff", _ 
"",_ 
New With {.controller = "Stuff", .action = "Index", .id = ""} _  
) 
8

richtige Antwort ist gut, aber:

  • was, wenn Sie den Controller/Aktionsname von Mitarbeiter/Index, um etwas anderes zu ändern?

-dann müssen Sie die Werte nicht nur in global.asax ändern, sondern auch in allen Orten, an denen Sie die Technik verwendet haben.

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. So können Sie Änderungen einfach verwalten.

+0

Ich mag es - danke für deine Antwort: o) – Andrew