MVC Маршрутизация без контроллера в URL - PullRequest
7 голосов
/ 18 мая 2011

Как настроить маршрутизацию ASP.NET MVC 3, чтобы в URL не отображался контроллер?

Вот мои маршруты

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

        routes.MapRoute(
            "HomeActions", 
            "{action}", 
            new { action= "AboutUs" } 
        );

Мне нужен URL:

mysite.com/AboutUs

Но у меня есть

 mysite.com/Home/AboutUs

Ответы [ 2 ]

20 голосов
/ 18 мая 2011

Я бы очень точно определил URL, который вы хотите направить. И поместите его выше маршрута по умолчанию.

    routes.MapRoute(
        "HomeActions", 
        "AboutUs", 
        new { controller = "Home", action= "AboutUs" } 
    );

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

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

routes.MapRoute(
    "HomeActions", 
    "{action}", 
    new { controller = "Home", action= "AboutUs" } 
);

Например, если вышеуказанный маршрут добавлен после значения по умолчанию, то URL http://www.example.com/AboutUs, скорее всего, будет соответствовать маршруту {controller = "AboutUs", action = "Index", id = UrlParamter.Optional}. Если вы добавили маршрут выше маршрута по умолчанию, то при поиске URL-адреса http://www.example.com/Users, который может потребоваться в качестве действия Index на контроллере Users, теперь будет выполняться поиск действия Users на контроллере Home.

Итак, я бы посоветовал конкретизировать такие маршруты.

6 голосов
/ 18 мая 2011

Вам необходимо добавить маршрут без части {controller} и указать имя контроллера в параметре по умолчанию.

...