2013-09-12 2 views
1

В ASP.NET MVC-маршрутизации (а не веб-API), как мне сопоставить любое целое число в начале маршрута, а не после него.Соответствие маршрута ASP.NET MVC.

Например, я вижу примеры, которые указывают, как совместить/сайт/Product/{id} - здесь создается ProductController с параметром id, а ограничения указаны в параметре id.

Однако я пытаюсь сопоставить маршрут, который выглядит таким образом - /сайт/{верхнего уровня ID}/Product/{ID}

верхнего уровня, идентификатор может быть любым целым числом , Любые мысли о том, как это сделать?

ответ

3

Что-то, как это должно работать:

routes.MapRoute(
    name: "WithTopId", 
    url: "{topId}/{controller}/{action}/{id}", 
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }, 
    constraints: new { topId = "^[0-9]*$", id = "^[0-9]*$" } 
); 

Затем просто поместите этот маршрут выше маршрута по умолчанию.

0

Вы можете добавить маршрут как этот

routes.MapRoute("TopLevelProduct", "{topLevelId}/Product/{id}", 
      new { controller = "Product", action = "Index" }); 

Вы можете заменить индекс с тем, что действие, которое вы хотите попасть, и если вы ид иметь дополнительные значения по умолчанию (я переименовал свой идентификатор верхнего уровня, как это неудобно, имеющие эти переносы в C#

routes.MapRoute("TopLevelProduct", "{topLevelId}/Product/{id}", 
     new { controller = "Product", action = "Index", topLevelId = 0, id = 0 }); 
Смежные вопросы