2013-08-02 3 views
1

У меня есть веб-приложение, построить с asp.net MVC 4. Я хочу иметь следующие 3 вида маршрутов:asp.mvc 4 больше маршрутов

  1. /действие
  2. /действие/ID
  3. /ID/ID2

В global.asax я изменил маршруты, как это следующим образом:

routes.MapRoute(
      name: "Without Action", 
      url: "{id}/{id2}", 
      defaults: new { controller = "Home", action = "City_Category" }, 
      namespaces: new[] { "Namespace.Controllers" } 
     ); 

     routes.MapRoute(
      name: "Without Controller", 
      url: "{action}/{id}", 
      defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }, 
      namespaces: new[] { "Namespace.Controllers" } 
     ); 

Но когда я пытаюсь {действие}/{id}, он переходит к первому маршруту, определенному в global.asax. Работает только в том случае, если url {action} или {id}/{id2}.

Как я могу сделать все 3 маршрута?

Спасибо!

ответ

0

Если {id} и {id2} всегда будет числовым, вы можете добавить ограничение на маршрут, так что это будет только удар в том, когда эти значения являются цифры:

routes.MapRoute(
      name: "Without Action", 
      url: "{id}/{id2}", 
      defaults: new { controller = "Home", action = "City_Category" }, 
      new { id = @"\d+", id2 = @"\d+" } 
      namespaces: new[] { "Namespace.Controllers" } 
     ); 
+0

{id} и {id2} будет строка – Alex

+0

Любая уникальная вещь о них, которую может распознать регулярное выражение? – statue

+0

В этом случае маршрутизатор не может отличить, является ли строка, которую вы передаете, идентификатором или действием. То, что вы можете сделать, используя тот же метод в этом ответе, ограничивает маршрут {action}/{id} подмножеством строки, например: 'new {action = @" [Index | Edit | Create] "}' , Не забудьте поставить его выше другого, потому что они оцениваются по порядку ... – Tallmaris

0

Другая идея заключается в использовании http://attributerouting.net/, вы можете определять маршруты по атрибутам, что очень легко определить маршруты, особенно если вы закончите с множеством сложных маршрутов. У меня было около 30 определений маршрутов и много комментариев, как выглядит URL-адрес для каждого действия. Я могу удалить все комментарии и определения маршрута с этими атрибутами.