2009-07-22 11 views
6

W ASP.NET MVC, czy można zdefiniować trasy, które mogą określić, którego kontrolera użyć na podstawie typu danych części adresu URL?Drogi URL ASP.NET MVC

Na przykład:

routes.MapRoute("Integer", "{myInteger}", new { controller = "Integer", action = "ProcessInteger", myInteger = "" }); 

routes.MapRoute("String", "{myString}", new { controller = "String", action = "ProcessString", myString = "" }); 

Zasadniczo, chcę następujące adresy mają być obsługiwane przez różnych kontrolerów, mimo że mają taką samą liczbę elementów:

mydomain/123

mydomain/ABC

PS Powyższy kod nie działa, ale wskazuje na to, co chcę osiągnąć.

Odpowiedz

7

Tak, jeśli używasz constraints:

tak:

routes.MapRoute(
       "Integers", 
       "{myInteger}", 
        new { controller = "Integer", action = "ProcessInteger"}, 
        new { myInteger = @"\d+" } 
     ); 

Jeśli umieścisz tą drogą ponad trasie smyczkową (który nie zawiera ograniczenia dla @"\d+"), to będziesz odfiltrować dowolne trasy zawierające liczby całkowite, a wszystko, co nie ma liczb całkowitych, zostanie przepuszczone, a twoja trasa string je odbierze.

Prawdziwa sztuczka polega na tym, że Routes może filtrować to, co nadchodzi na podstawie Regular Expressions, i w ten sposób można określić, co należy odebrać.

+0

To działa, dzięki. –

+0

Bez problemu. Miałem * dużo * problemów z trasami MVC ASP.NET. Wystarczająco, aby wypełnić książkę. Lub kilka wpisów na blogu. Jeśli kiedykolwiek będę miał szansę je ukończyć. –

Powiązane problemy