ASP.Net MVC: il reindirizzamento al percorso fornisce Redirect Loop
-
04-07-2019 - |
Domanda
Questa è probabilmente una di quelle semplici domande. Sto provando a reindirizzare l'utente dopo che è stato autenticato con successo o a riportarlo alla pagina di accesso. Ma la pagina Success si trova su un percorso diverso e non riesco a far funzionare il reindirizzamento ..
Ecco i miei percorsi 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 = ""} _
)
Ho 2 controller: LoginController.vb
e StuffController.vb
. Il file Views / Login / Index.aspx
contiene un semplice modulo con il codice:
<form method="post" action="/Login/Authenticate">
Il LoginController
contiene il seguente codice:
Function Authenticate() As RedirectToRouteResult
' authentication code commented out ;o)
Return RedirectToRoute("Stuff")
End Function
E StuffController contiene quanto segue:
Function Index()
' show stuff..
Return View() ' return /Views/Stuff/Index.aspx
End Function
Ecco cosa ho provato finora:
- Funzione autentica ()
- Funzione Authenticate () come ActionResult ()
- Funzione Authenticate () come RedirectToRouteResult ()
tutto ciò causa un timeout del ciclo di reindirizzamento nel browser. Cosa mi sto perdendo ?!
Soluzione
Potrebbe essere che il tuo percorso Roba abbia esattamente la stessa forma di quello predefinito, quindi quando chiami
Return RedirectToRoute("Stuff");
l'url risultante ha la forma: {controller} / {action} / {id}, ad es. Effettua nuovamente il login / autentica, poiché sei all'interno dell'azione Authenticate del controller di accesso.
Prova a
RedirectToAction("Index", "Stuff");
Spero che sia d'aiuto.
Altri suggerimenti
La risposta corretta è buona, ma:
- e se mai volessi cambiare il nome del controller / azione da Staff / Index a qualcos'altro?
-quindi dovrai cambiare i valori non solo in global.asax, ma anche in tutti i luoghi in cui hai usato la tecnica.
Il mio suggerimento:
return RedirectToRoute("Stuff", (RouteTable.Routes["Stuff"] as Route).Defaults);
Ora, in questo caso, non si passano i nomi del controller / azione che è Stuff / Index di conseguenza. Ciò ti consentirà di gestire facilmente le modifiche.
Non riesco a vedere dove stai impostando il cookie di autenticazione o contrassegnando l'utente come se fosse stato autenticato in alcun modo. È nel codice che hai omesso?
try
routes.MapRoute( _
"Stuff", _
"",_
New With {.controller = "Stuff", .action = "Index", .id = ""} _
)