Маршруты в MVC оцениваются в порядке их объявления. Это звучит очень похоже на то, что вы объявили свой маршрут ниже по умолчанию:
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute(
"FriendWishlist",
"friend/{userid}/wishlist",
new { controller = "WishList", action="FriendWishlist", userid = 123}
);
Итак, инфраструктура MVC пытается сначала сопоставить ваш URL /friend/123/wishlist
с маршрутом по умолчанию. Поскольку это все переменные и все имеют значения по умолчанию или являются необязательными, они гарантированно совпадают. Он не проверяет, существуют ли контроллеры и действия, и принимает соответствующие аргументы. У вас есть FriendController
класс - проверка. 123
действие - оно взрывается.
Самое простое исправление - объявите маршрут выше маршрута по умолчанию (т. Е. Просто поменяйте местами эти два оператора), и он должен работать ОК.
Я мог бы просто добавить, что кажется немного странным, что URL-адрес, начинающийся с /friend/
, направляется на контроллер WishList, когда у вас, очевидно, есть контроллер Friend (ваше сообщение об ошибке так говорит).
Наконец, я не могу рекомендовать достаточно сильно, чтобы, если вы вводите пользовательскую маршрутизацию, вы также тщательно тестировали эти маршруты - как вы видели, механизм маршрутизации часто может не делать то, что вы думаете, он делает. Я рекомендую либо тестировать маршрут в MvcContrib , либо в блоге Брэда Уилсона .