/// <summary> /// Maps new route according to configuration /// </summary> public FluentRouter Map(string name, Action <IFluentRouteConfiguration> configuration) { if (name == null) { throw new ArgumentNullException("name"); } if (configuration == null) { throw new ArgumentNullException("configuration"); } var config = new FluentRouteConfiguration(); foreach (var template in m_scopes.Where(s => s != null)) { template(config); } if (m_template != null) { m_template(config); } configuration(config); // create new route for each url; first url is considered to be default var urls = config.Urls.Reverse().ToArray(); if (!string.IsNullOrEmpty(config.NamePrefix)) { name = config.NamePrefix + "_" + name; } for (var i = 0; i < urls.Length; i++) { var pair = urls[i]; var isDefault = i + 1 == urls.Length; var culture = pair.Key; var routeName = isDefault ? name : name + ":" + culture; var route = Create(routeName, pair.Value, config); route.Defaults.Add("culture", culture); // default route doesn't take culture into consideration if (!isDefault) { route.Constraints.Add("_culture", new CultureConstraint(culture)); } m_routes.Add(routeName, route); } return(this); }
private Route Create(string name, string url, FluentRouteConfiguration config) { var route = default(Route); var handler = config.Handler ?? new MvcRouteHandler(); var defaults = config.Defaults == null ? new RouteValueDictionary() : new RouteValueDictionary(config.Defaults); var constraints = config.Constraints == null ? new RouteValueDictionary() : new RouteValueDictionary(config.Constraints); var dataTokens = config.DataTokens == null ? new RouteValueDictionary() : new RouteValueDictionary(config.DataTokens); // create complex route only when required if (config.Rules != null && config.Rules.Any()) { // no need to clone rules, it's always cloned from within MvcComplexRoute route = new MvcComplexRoute(url, config.Rules, handler); } else { route = new Route(url, handler); } route.Defaults = defaults; route.Constraints = constraints; route.DataTokens = dataTokens; if ((config.Namespaces != null) && (config.Namespaces.Length > 0)) { route.DataTokens["Namespaces"] = config.Namespaces; } if (m_areaName != null && m_areaName.Length > 0) { route.DataTokens["area"] = m_areaName; route.DataTokens["UseNamespaceFallback"] = config.Namespaces == null || config.Namespaces.Length == 0; } return(route); }
private Route Create(string name, string url, FluentRouteConfiguration config) { var route = default(Route); var handler = config.Handler ?? new MvcRouteHandler(); var defaults = config.Defaults == null ? new RouteValueDictionary() : new RouteValueDictionary(config.Defaults); var constraints = config.Constraints == null ? new RouteValueDictionary() : new RouteValueDictionary(config.Constraints); var dataTokens = config.DataTokens == null ? new RouteValueDictionary() : new RouteValueDictionary(config.DataTokens); // create complex route only when required if (config.Rules != null && config.Rules.Any()) // no need to clone rules, it's always cloned from within MvcComplexRoute route = new MvcComplexRoute(url, config.Rules, handler); else route = new Route(url, handler); route.Defaults = defaults; route.Constraints = constraints; route.DataTokens = dataTokens; if ((config.Namespaces != null) && (config.Namespaces.Length > 0)) { route.DataTokens["Namespaces"] = config.Namespaces; } if (m_areaName != null && m_areaName.Length > 0) { route.DataTokens["area"] = m_areaName; route.DataTokens["UseNamespaceFallback"] = config.Namespaces == null || config.Namespaces.Length == 0; } return route; }
/// <summary> /// Maps new route according to configuration /// </summary> public FluentRouter Map(string name, Action<IFluentRouteConfiguration> configuration) { if (name == null) throw new ArgumentNullException("name"); if (configuration == null) throw new ArgumentNullException("configuration"); var config = new FluentRouteConfiguration(); foreach (var template in m_scopes.Where(s => s != null)) template(config); if (m_template != null) m_template(config); configuration(config); // create new route for each url; first url is considered to be default var urls = config.Urls.Reverse().ToArray(); if (!string.IsNullOrEmpty(config.NamePrefix)) name = config.NamePrefix + "_" + name; for (var i = 0; i < urls.Length; i++) { var pair = urls[i]; var isDefault = i + 1 == urls.Length; var culture = pair.Key; var routeName = isDefault ? name : name + ":" + culture; var route = Create(routeName, pair.Value, config); route.Defaults.Add("culture", culture); // default route doesn't take culture into consideration if (!isDefault) route.Constraints.Add("_culture", new CultureConstraint(culture)); m_routes.Add(routeName, route); } return this; }