Reitit määritellään Global.asax.cs -tiedostossa, jossa on oletuksena seuraavanlainen metodi
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute("Default","{controller}/{action}/{id}",new{ controller="Home",action="Index",id=UrlParameter.Optional });
}
RouteCollection -luokan metodilla MapRoute lisätään reittimäärityksiä. Sillä on kuusi erilaista versiota
RouteCollection.MapRoute(string name, string url)
RouteCollection.MapRoute(string name, string url, object defaults)
RouteCollection.MapRoute(string name, string url, string[] namespaces)
RouteCollection.MapRoute(string name, string url, object defaults, object constraints)
RouteCollection.MapRoute(string name, string url, object defaults, string[] namespaces)
RouteCollection.MapRoute(string name, string url, object defaults, object constraints, string[] namespaces)
name reitin yksilöllinen nimi. url reitin osoite. Osoitteessa voi olla nimettyjä parametreja, jotka laitetaan { ja } -merkkien väliin. defaults nimettyjen parametrien oletusarvot. namespaces nimiavaruudet, joihin reittiä yritetään soveltaa. constraints nimettyjen parametrien rajoitukset.
Kun käyttäjä tulee sivustolle, pyydettyä osoitetta (ilman domainia, esim. http://www.minunsivut.fi/blogi/2010/lokakuu/ -> blogi/2010/lokakuu) yritetään sovittaa reittimäärityksiin ja poimia siitä parametreja. Jotta reititys onnistuisi, tulee siitä aina saada poimittua parametrit controller ja action (noiden arvojen ei kuitenkaan tarvitse olla osoitteessa, vaan ne voi antaa oletusarvoina).
Oletusreitin
routes.MapRoute("Default", "{controller}/{action}/{id}", new{ controller="Home", action="Index", id=UrlParameter.Optional });
arvoja
name | Default |
url | {controller}/{action}/{id} |
defaults | controller=Home, action=Index, id on valinnainen |
URL | Parametrit | Kutsuttava kontrollerin metodi (esim.) |
---|---|---|
/ | oletusarvot: controller = Home, action = Index | HomeController.Index() |
/home/ | controller = home, oletusarvo: action = Index | HomeController.Index() |
/tuotteet/listaa/ | controller = tuotteet, action = listaa | TuotteetController.Listaa() |
/tuotteet/osta/123/ | controller = tuotteet, action = osta, id = 123 | TuotteetController.Osta(int id) TuotteetController.Osta(string id) |
Alla pari esimerkkiä
Url selaimessa | Url reittimäärityksessä |
---|---|
/blogi/2010-10 | /blogi/{vuosi}-{kuukausi} |
/tuotteet/123/muokkaa | /{controller}/{id}/{action} |
blogi/{*merkinnan-nimi}
new { jokutekstiparametri = "arvo", jokulukuparametri = 123 }
new[]{ "OmaMvcSovellus.Areas.Blogi", "OmaMvcSovellus.Areas.Foorumi" }
Esim. jos halutaan, että parametri (esimerkissä id) voi olla ainoastaan numero, saadaan se RegEx:llä \d+
routes.MapRoute("tuotteet","tuotteet/{id}/{action}",new{controller="Tuotteet",action="Tiedot"},new{id=@"\d+"});
Url | Kutsuttava kontrolleri/metodi |
---|---|
/tuotteet/123 | TuotteetController.Tiedot(int id) |
/tuotteet/123/tiedot | TuotteetController.Tiedot(int id) |
/tuotteet/123/poista | TuotteetController.Poista(int id) |
/tuotteet/abc/ | Ei reittiä, koska abc ei ole numero |