2017-02-02 7 views
2

Мое требование: мне нужно установить несколько маршрутов для одного метода управления/действия.Маршруты в ASP.NET MVC 5

Если пользователь вводит url http://localhost:xxxx/home/index, он будет нацелен на «индексный» метод действия «домашнего» контроллера.

Я также хочу, чтобы «http://localhost:xxxx/products» и «http://localhost:xxxx/categories» указывали на «индекс» действия метода «домашнего» контроллера.

Я смог добиться этого, добавив два маршрута «категории» и «продукты», как указано ниже, и он работает нормально.

routes.MapRoute(
     name: "categories", 
     url: "categories", 
     defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
); 

    routes.MapRoute(
     name: "products", 
     url: "products", 
     defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
); 


    routes.MapRoute(
     name: "Default", 
     url: "{controller}/{action}/{id}", 
     defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
    ); 

Мой вопрос: есть ли способ объединить эти два маршрута «категории» и «продукты» в одном?

+2

Короткий ответ: Нет. (И так как вы не имеете сегмент для '{ID}' в первых 2-х маршрутов, вы можете также удалить 'ID = UrlParameter.Optional') , Сказав, что вы можете создать ограничение маршрута, но, вероятно, этого не стоит. –

+1

Регулярный фильтр для атрибута маршрута может быть вашим другом здесь, я смог сделать что-то очень похожее на него. Некоторая информация здесь: http://stackoverflow.com/questions/25077406/regex-in-route-attribute-restful-api-asp-net-web-api –

+0

Было бы чисто, если бы вы могли пойти на маршрутизацию атрибутов (но не («Продукты»)] [Маршрут («Категории»)] Публичный индекс показателя активности() { return View(); (0) [Route ("Products")] } ' – Developer

ответ

2

Вы можете достичь этого, добавив ограничение на свой маршрут.

Сделать весь путь параметром, а затем назначить правилу регулярного выражения для соответствия этому параметру.

routes.MapRoute(
    name: "IndexMapper", 
    url: "{alternateIndexName}", 
    defaults: new { controller="Home", action="Index" }, 
    constraints: new { alternateIndexName="(categories)|(products)"} 
); 

https://msdn.microsoft.com/en-us/library/cc668201.aspx#Anchor_6

Смежные вопросы