Вы не можете этого сделать. Ваш URL не содержит токена {action}
. Это означает, что вы обязательно должны указать, какое действие вы хотите вызвать в значениях по умолчанию.
Поставь себя на место движка маршрутизации. Вы видите следующий запрос: Home/123
. Вы смотрите на определение маршрута и видите {controller}/{id}
.
Отлично => Теперь вы знаете, что можете создать экземпляр HomeController
, но это все, что вы знаете, если в качестве значения по умолчанию не указано действие. Вы не представляете, какое действие вызвать на этом HomeController
, и история заканчивается здесь.
Вы отправляете разработчику следующее исключение, чтобы сообщить ему о проблеме с его кодом:
RouteData должен содержать элемент с именем 'action' с непустым строковым значением.
UPDATE:
Вы можете написать собственный метод расширения, который позволит вам пропустить действие по умолчанию в объявлении, но он добавит его за кулисы:
public static class RouteExtensions
{
public static Route MyMapRoute(this RouteCollection routes, string name, string url, object defaults)
{
var defaultValues = new RouteValueDictionary(defaults);
if (!defaultValues.ContainsKey("action"))
{
defaultValues["action"] = "index";
}
var route = new Route(url, new MvcRouteHandler())
{
Defaults = defaultValues,
Constraints = new RouteValueDictionary(),
DataTokens = new RouteValueDictionary()
};
routes.Add(name, route);
return route;
}
}
и затем:
routes.MyMapRoute(
"RouteName",
"{controller}/{id}",
new { controller = "MyCustomController", id = UrlParameter.Optional }
);