2010-02-26 19 views
8

Jedną z poważniejszych przeszkód, jakie ostatnio odczuwam, jest poradzenie sobie z niektórymi bardziej złożonymi wymaganiami dotyczącymi routingu w przypadku niektórych aplikacji opartych na MVC, które rozwijam. Mam problem ze znalezieniem odpowiedniego zestawu samouczków, aby przeprowadzić mnie przez to, aby uzyskać pełne zrozumienie.Zaawansowane samouczki i przykłady routingu ASP

Co chciałbym znaleźć to kompletny zestaw samouczków dla wszystkiego, od routingu podstawowego (kontroler/akcja/identyfikator) do zaawansowanego.

Przykładem co dzwonię zaawansowany routing to takie rzeczy jak:

/blog/year/month/day/title - będzie mapować do kontrolera: blog i działanie: post i jako parametry: year, month, day i title

/blog/title - zostanie odwzorowane na kontroler: blog i działanie: post i jako parametry: title

/title - będzie mapować do kontrolera: blog i działanie: post i jako parametry: title

mogę mapować każdy możliwy zestaw do wyraźnego trasy w globalnym przy użyciu bazy danych, ale wydaje się to pokonanie punkt mający silnik routingu trasa do właściwego miejsca. Wolę zdefiniować regułę raz.

Odpowiedz

15

Nie rozumiem, dlaczego nie możesz po prostu zdefiniować każdego z nich jako oddzielnej trasy, używając w razie potrzeby wyrażenia regularnego. Na przykład, aby rozróżnić między /blog/year/month/day/title i /blog/title.

Każdy z tych zestawów jest oddzielnym przypadkiem, a będziesz musiał powiedzieć MVC, co zrobić z każdym z nich. Można to zrobić przez defining the rule once w pliku Global.asax.cs:

W pierwszym przypadku: /blog/year/month/day/title

routes.MapRoute(
    "Blog Full Route", // Route name 
    "blog/{year}/{month}/{day}/{title}", // URL with parameters 
    new {controller = "blog", action = "post"}, // Defaults 
    new {year = @"\d+", month= @"\d+", day = @"\d+"} // Constrain parameters with RegEx patterns 
    ); 

W drugim przypadku: /blog/title

routes.MapRoute(
    "Blog Title Route", // Route name 
    "blog/{title}", // URL with parameters 
    new {controller = "blog", action = "post"}, // Defaults 
    ); 

W ostatnim przypadku: /title

routes.MapRoute(
    "Title Route", // Route name 
    "{title}", // URL with parameters 
    new {controller = "blog", action = "post"}, // Defaults 
    ); 

Sztuką jest umieszczanie tych tras w tej samej kolejności, z najmniej szczegółową na dole. Zmiana kolejności spowodowałaby użycie niewłaściwej trasy (szczególnie w dwóch ostatnich). Jeśli ostatni przypadek został zmieniony w drugim przypadku, adresy URL typu blog/SomeTitle będą kierować do akcji post z blog jako tytułem.

Gdy tworzysz drogę do czegoś, należy pamiętać o następujących kwestiach:

  1. parametrów trasy Ograniczenie z RegEx
  2. Bądź very świadomi celu trasy (trasa, która pochodzi przed którym)
  3. zniekształcone wsporników {something} oznaczają działanie Parametry

jakieś dobre tutoriale:

+0

dobre wyjaśnienie i linki, dziękuję. – Kieron

+0

Fantastyczna odpowiedź. –

Powiązane problemy