2009-06-10 11 views
16

Ho creato un nuovo progetto ASP.NET MVC e implementato un filtro di autorizzazione del sito.ASP.NET MVC Percorso predefinito?

Quando mappo i percorsi alla coppia {controller}/{action}, ho passato un ruolo = "SomeRole" predefinito alla route.

Funziona perfettamente se vado attraverso l'URL completo (http://localhost/somecontroller/someaction) e ho specificato il percorso completo

MapRoute("SomeAction", "somecontroller/someaction", 
new { controller = "SomeController", action = "SomeAction", role = "SomeRole"); 

Il problema è che quando qualcuno visita http://thesiteaddress.com ci deve essere un percorso predefinito che richiama /home/index invece di / e se specifico

MapRoute("Default", new { controller="somecontroller",action="action" }); 

poi perdo la role="SomeRole" dal precedente MapRoute.

Come posso risolvere questo?

risposta

33

Assicurarsi che il percorso Default sia al BOTTOM della tabella del percorso elencato. L'ordine è importante quando si tratta di tabelle di routing ASP.NET MVC.

L'ordine corretto è il percorso "più specifico" per il percorso meno specifico.

+0

Puoi citare la tua fonte per favore? –

+0

@manuelhe http://books.google.com/books?id=1NnE3fYiUuMC&pg=PA12&lpg=PA12&dq=Default+route+bottom+ASP.NET+MVC&source=bl&ots=6gOI7-HwYG&sig=1gfWRTJaHJSJTbhAy3Ib0uAjLxQ&hl=en&sa=X&ei=doz6UuaHA8PK0wGbnYHYBw&ved=0CHsQ6AEwCA # v = onepage & q = Default% 20route% 20bottom% 20ASP.NET% 20MVC & f = false –

2

Quando non si specifica il nome del percorso o l'azione viene determinata tramite una richiesta HTTP, apparirà nell'ordine dall'ordine in cui sono stati aggiunti. La prima volta che trova uno che corrisponde, si ferma. Quindi, quello che probabilmente sta succedendo è che corrisponde a quello precedente a quello che hai aggiunto.

12

Phil Haack released uno strumento di debug di route che può essere prezioso per ottenere una comprensione di problemi come questo.

Con questo strumento è possibile visualizzare come l'applicazione MVC analizza un URL e lo abbina al RouteTable.

16

Attualmente, George is right. MVC Routing rispettando il percorso di ordinazione. L'ultimo percorso deve essere il più generico possibile e il percorso precedente deve essere il più specifico possibile.

Nel tuo caso, entrambi sono generici. Si dovrebbe

MapRoute("SomeAction", "Post/{action}", new {controller = "Post", role = "User"); 

e poi

MapRoute("Default", new {controller="Home", action="Index", role = "Anonymous"}); 

modo, si darà la specificità di entrambe le vie.

+9

In MVC4 route "Default" dichiaraton spostato da Global.asax a ~/App_Start/RouteConfig.cs/RegisterRoutes() –

Problemi correlati