Cześć, niedawno skonfigurowałem nowy routing SEO wedle pewnego pomysłu, który jest łątwy do zaimplementowania. Chodzi o generowanie ID przyjaznego dla użytkownika czyli np. 34-moj-przyjazny-link. Problem pojawił się, gdy chciałem ponownie go użyć, tym razem w nowej Area. Próbowałem wielu konfiguracji i nie widzę, gdzie leży problem.

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

            routes.Add("Show", new SeoRoute("Home/Read/{id}",
            new RouteValueDictionary(new { controller = "Home", action = "Read" }),
            new MvcRouteHandler()));

            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
                namespaces: new[] { "Projekt.Controllers" } 
            );
        }

public class SeoRoute : Route
    {
        public SeoRoute(string url, RouteValueDictionary defaults, IRouteHandler routeHandler) : base(url, defaults, routeHandler)
        {
        }

        public override RouteData GetRouteData(HttpContextBase httpContext)
        {
            var routeData = base.GetRouteData(httpContext);

            if (routeData != null)
            {
                if (routeData.Values.ContainsKey("id"))
                    routeData.Values["id"] = GetIdValue(routeData.Values["id"]);
            }

            return routeData;
        }

        private object GetIdValue(object id)
        {
            if (id != null)
            {
                string idValue = id.ToString();

                var regex = new Regex(@"^(?<id>\d+).*$");
                var match = regex.Match(idValue);

                if (match.Success)
                {
                    return match.Groups["id"].Value;
                }
            }

            return id;
        }
    }

Więc wedle powyższego wzorce definiuje route w ten sposób

  routes.Add("Product", new SeoRoute("Customer/Home/Show/{id}",
           new RouteValueDictionary(new { controller = "Home", action = "Show" }),
           new MvcRouteHandler()));

public ActionResult Show(int id)
{
}

I jak wspomniałem wyżej, wywala mi błąd, że metoda id nie dostaje zdefiniowanego parametru. Sama metoda do generowania ID działa bez problemu.