Маршрут ASP.NET MVC 2 не разрешается должным образом (или, скорее, как я думаю, должен) - PullRequest
1 голос
/ 07 ноября 2010

Я никогда не сталкивался с необходимостью пробовать следующие такие маршруты, когда пользователь может посетить чужую домашнюю страницу или свою собственную (администраторскую) домашнюю страницу. Вот маршруты, которые у меня есть:

    routes.MapRoute(null, "Home/Me",
        new { controller = "Home", action = "Admin" });
    routes.MapRoute(null, "Home/{userID}",
        new { controller = "Home", action = "Visitor" });

Очевидно, я неправильно предположил, что «Home / 6e982cc5-4d1d-4232-947b-835e54e49c7» разрешит следующее действие на контроллере Home:

public ActionResult Visitor(Guid userID) {}

Кто-нибудь будет достаточно любезен, чтобы объяснить, почему это не работает, как я думаю, должно?

1 Ответ

1 голос
/ 07 ноября 2010

При условии настройки следующих маршрутов:

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

    routes.MapRoute(
        null, 
        "Home/Me",
        new { controller = "Home", action = "Admin" }
    );

    routes.MapRoute(
        null, 
        "Home/{userID}",
        new { controller = "Home", action = "Visitor" }
    );

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

Home/4 преобразуется в действие Visitor контроллера Home, но механизм связывания модели по умолчанию выдаст исключение, поскольку 4 не является допустимым значением для Guid.

С другой стороны Home/6e982cc5-4d1d-4232-947b-835e54e49c7 должно работать. Home/Me разрешит действие Admin на контроллере Home.

...