Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Creare regole di routing

Registrare regole di routing personalizzate con MapRoute
Registrare regole di routing personalizzate con MapRoute
Link copiato negli appunti

Tutte le regole di routing che definiamo sono salvate dalla classe RouteTable nella proprietà statica RouteTable.Routes. Visto che la lista è definita come statica siamo in grado di registrare nuove regole di routing in qualsiasi momento utilizzando il metodo MapRoute:

RouteTable.Routes.MapRoute("Default",
                           "{controller}/{action}/{id}",
                           new { controller = "Home", 
                                 action = "Index", id = "" 
                               }
                          );

La funzione accetta tre parametri:

  • il nome della regola che stiamo inserendo (nel nostro caso "Default")
  • una espressione come quella vista nella lezione precedente
  • un oggetto generico contenente valori di default che ASP.NET assegnerà ai parametri nel caso in cui questi non siano specificati nell'URL.

Siamo così in grado di gestire con una sola regola molti URL strutturati allo stesso modo ma che trasportano dati differenti: ogni volta che ASP.NET riceverà una richiesta, infatti, l'espressione verrà valutata e, nel caso in cui ci sia corrispondenza tra l'espressione e l'URL, il motore di routing estrarrà le informazioni dall'URL inserendole nei parametri specificati.

Nella seguente tabella sono inclusi alcuni URL che verificano l'espressione {controller}/{action}/{id}, compreso il valore che ASP.Net associerà ai parametri (in corsivo nel caso in cui il parametro non sia presente nell'URL e gli venga assegnato quindi il valore di default stabilito nella regola precedente).

Alcuni URL che verificano l'espressione
URL {controller} {action} {id}
http://www.miosito.com/ Home Index -
http://www.miosito.com/gallery Gallery Index -
http://www.miosito.com/gallery/create Gallery Create -
http://www.miosito.com/gallery/detail/5 Gallery Detail 5
http://www.miosito.com/posts/edit/5 Posts Edit 5

Il terzo URL (http://www.miosito.com/gallery/detail/5), ad esempio, sarà associato all'azione Detail del controller Gallery.
Abbiamo già incontrato questa funzione, che si occupa di visualizzare le informazioni
relative ad una singola immagine, nelle lezioni precedenti:

public ActionResult Detail(int id) { }

L'azione necessita di un parametro chiamato id, che nel nostro caso sarà uguale a 5. In questo modo l'utente riceverà dall'azione Detail del controller Gallery le informazioni sull'immagine con ID uguale a 5.

Ovviamente non siamo obbligati a strutturare sempre i nostri URL secondo la regola vista poco fa: di volta in volta saremo infatti in grado di scegliere la struttura che più si adatta ai nostri scopi. Per un blog potremmo quindi utilizzare una regola come quella del listato seguente, che risponde ad URL del tipo /Posts/2009-08-11.

RouteTable.Routes.MapRoute("Blog", 
                           "Posts/{publishedDate}",
                           new { controller = "Posts", 
                                 action = "Post" 
                               }
                          ); 

Esistono situazioni in cui potrebbe essere necessario dare libertà all'utente di specificare un numero variabile di parametri. Si pensi ad esempio alla pagina di ricerca di un blog in cui l'utente può restringere la ricerca soltanto alle categorie che lo interessano maggiormente: a seconda delle categorie selezionate dall'utente il numero di parametri specificati aumenta o diminuisce.

Per facilitare la scrittura delle regole di routing in questo caso particolare, ASP.NET consente allo sviluppatore di dichiarare l'ultimo parametro della regola in modo da includere tutta la parte finale dell'URL. È sufficiente infatti inserire un asterisco (*) prima del nome del parametro:

RouteTable.Routes.MapRoute("Search",
                           "search/{action}/{*categories}",
                           new { controller = "Search", 
                                 action = "Index" 
                               }
                          );

Di seguito sono elencati alcuni URL gestiti dalla regola precedente, con indicato il valore assunto di volta in volta dai parametri:

URL con numero di parametri variabile
URL {action} {*categories}
/search/do do -
/search/do/categoria_1 do categoria_1
/search/do/categoria_1/categoria_2/categoria_3 do categoria_1/categoria_2/categoria_3

Ti consigliamo anche