1)Если он ОБЯЗАТЕЛЬНО принимает 3 параметра - выкиньте блок
.AddRouteValue("link", UrlParameter.Optional)
.AddRouteValue("sublink", UrlParameter.Optional)
.AddRouteValue("filter", UrlParameter.Optional));
2) Основа роутинга это не ваши параметры, а controller и action. Кто собственно будет обрабатывать ваш запрос.
Я не вижу как происходит наводка на контроллер.
3) есть такая вот запись
context.MapRoute(
"AreaName_default",
"AreaName/{controller}/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional }, namespace где ищем контроллеры" }
);
Здесь делается 1 вызов MapRoute. Вы добавили 3 доп.вызова. Зачем? Место сэкономить?