Пользовательская маршрутизация - Удалить контроллер и действие из URL - PullRequest
0 голосов
/ 26 июня 2011

Есть как удалить контроллер и действие, не мешая URL-адресу маршрута по умолчанию?Например:

С: http://mysite.com/departaments/products/footwear/male где отделы = контролер, действие = товары и обувь, а мужчина = параметры

Кому: http://mysite.com/footwear/male

Итак, я беру контроллер и действую на примере пользовательского маршрута:

        routes.MapRoute
        (
            "Products",
            "{p0}/{p1}/{p2}/{p3}/{p4}/{p5}",
            new
            {
                controller = "Departaments",
                action = "Products",
                p0 = "",
                p1 = "",
                p2 = "",
                p3 = "",
                p4 = "",
                p5 = ""
            },
            new String[]
            {
                "MvcApplication1.Controllers"
            }
        );


        routes.MapRoute
        (
            "Default",
            "{controller}/{action}/{p0}",
            new
            {
                controller = "Home",
                action = "Index",
                p0 = ""
            },
            new String[]
            {
                "MvcApplication1.Controllers"
            }
        );

1 Ответ

0 голосов
/ 26 июня 2011

Вы должны добавить маршрут продуктов после маршрута по умолчанию, в противном случае маршрут продуктов всегда будет соответствовать любому URL из шести сегментов или меньше.Это может создать новую проблему: маршрут по умолчанию будет соответствовать любому URL из трех сегментов или менее, если вы не добавите ограничение к токену контроллера со всеми именами контроллера, например, controller = @"home|account|departments".Библиотека MvcCodeRouting может автоматически регистрировать очень строгие маршруты (с использованием ограничений для контроллера и действий), затем вы также можете добавлять свои собственные маршруты, и вам не нужно беспокоиться о конфликтах.

routes.MapRoute("Default", "{controller}/{action}/{p0}",
   new { controller = "Home", Action = "Index", p0 = "" },
   new { controller = @"Home|Account" }, // Register controllers here
   new[] { "MvcApplication1.Controllers" });

routes.MapRoute("Products", "{p0}/{p1}/{p2}/{p3}/{p4}/{p5}",
   new { controller = "Departaments", Action = "Products", p0 = "", p1 = "", p2 = "", p3 = "", p4 = "", p5 = "" },
   new[] { "MvcApplication1.Controllers" });
...