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 ?!

È stato utile?

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 = ""} _    
)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top