Маршрут MVC с действием и параметром по умолчанию, несколько действий от контроллера - PullRequest
0 голосов
/ 29 февраля 2012

Я пытаюсь достичь такого маршрута:

http://mysite.com/portfolio/landscape

http://mysite.com/portfolio/friends и т.д ...

поэтому я написал это:

public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
            routes.MapRoute(
                "DefaultIndex", // Route name
                "{controller}/{id}", // URL with parameters
                new { action = "Index", id = UrlParameter.Optional } // Parameter defaults
            );
            routes.MapRoute(
                "Default", // Route name
                "{controller}/{action}/{id}", // URL with parameters
                new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
            );

        }

Это хорошо работает, у меня может быть свой маршрут / портфолио / ландшафт, но мой контроллер аккаунта с действиями SignIn, SignOut, Index не работает, потому что он перенаправляется на Index каждый раз.

можно ли получить оба?

Заранее спасибо

Ответы [ 3 ]

5 голосов
/ 29 февраля 2012

Попробуйте ввести ограничение в свой пользовательский маршрут, иначе он не позволит найти маршрут по умолчанию.

        routes.MapRoute(
            "DefaultIndex", // Route name
            "portfolio/{id}", // URL with parameters
            new { controller="portfolio", action = "Index", id = UrlParameter.Optional }
        );

Таким образом, вы будете отображать только URL-адреса, начинающиеся с «портфолио» в вашем маршруте, и указыватькакой контроллер и действие.Запросы на другие URL-адреса обрабатываются по умолчанию.

0 голосов
/ 29 февраля 2012

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

public static void RegisterRoutes(RouteCollection routes)
    {
        routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Home", action = "Index", id = UrlParameter.Optional }     // Parameter defaults
        );
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
        routes.MapRoute(
            "DefaultIndex", // Route name
            "{controller}/{id}", // URL with parameters
            new { action = "Index", id = UrlParameter.Optional } // Parameter defaults
        );


    }

Если вы упомянули какой-либо контроллер и действие, он перейдет к тому, что он выберет значение по умолчанию

0 голосов
/ 29 февраля 2012

Предполагая, что для существующих маршрутов есть веские основания, вот один из способов заставить AccountController хорошо поиграть с этими:

    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            "Account", // Account name
            "account/{action}/{id}", // URL with parameters
            new { controller = "Account", action = "Index", id = UrlParameter.Optional } // Parameter defaults
        );

        routes.MapRoute(
            "DefaultIndex", // Route name
            "{controller}/{id}", // URL with parameters
            new { action = "Index", id = UrlParameter.Optional } // Parameter defaults
        );
        routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
        );

    }
...