Имя параметра маршрутизации URL, порядок - PullRequest
2 голосов
/ 23 февраля 2010

Запрос на лучший способ решения этой проблемы:

в моем контроллере у меня есть следующее действие

public ActionResult Member(string id){return View();}

другое действие в том же контроллере

public ActionResult Archive(string year){return View();}

в моем global.asax

routes.MapRoute(
            "Archive",                                              // Route name
            "{controller}/{action}/{year}",                           // URL with parameters
            new { controller = "Home", action = "Index", year = "" }  // Parameter defaults
        );

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

если я назову этот URL-адрес mysite.com/archive/2009, это работает, потому что с этим запросом работает параметр, ожидающий действия с именем «year» и первой схемой маршрута. Но если я назову этот URL-адрес mysite.com/member/john, то получится этот URL-адрес mysite.com/member?id=john Таким образом, похоже, что мой первый маршрут в global.asax имеет ту же конструкцию, но с другим именем параметра, у того, у которого правильное имя параметра, будет правильный URL (mysite.com/archive/2009), а для другого - нет. Как я могу решить эту проблему? Я могу изменить таблицу маршрутов так, чтобы она ожидала общего имени параметра, такого как «param», но мне нужно также изменить всю сигнатуру действия на «param», и оно не очень описательно (param вместо year или param вместо id).

1 Ответ

1 голос
/ 23 февраля 2010

Попробуйте это:

routes.MapRoute(
            "Archive",                                              // Route name
            "Home/Member/{id}",                           // URL with parameters
            new { controller = "Home", action = "Member", id = "" }  //
Parameter defaults
        );

routes.MapRoute(
            "Archive",                                              // Route name
            "{controller}/{action}/{year}",                           // URL with parameters
            new { controller = "Home", action = "Index", year = "" }  // Parameter defaults
        );

Вам разрешено использовать литералы во втором параметре, и они будут действовать как фильтры. Чем более конкретен ваш маршрут, тем ближе вам нужно поместить его в начало конфигурации маршрута, система маршрутизации выберет первый соответствующий маршрут.

Вот ссылка на более подробную справочную информацию. С тех пор как статья была написана, некоторые синтаксис изменился, но основные правила выглядят современными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...