/// <summary> /// Sets routeCollection for models that do not have a controller defined /// </summary> /// <param CustomPropertyName="routeCollection"></param> /// <param name="routeCollection">The route collection for the mvc application.</param> public void SetDynamicRoutes(RouteCollection routeCollection) { var newRouteCollection = new RouteCollection(); var firstRoute = routeCollection.First(); newRouteCollection.Add(firstRoute); foreach (var dynamicEntityMetadata in DynamicMVCContext.DynamicEntityMetadatas) { if (dynamicEntityMetadata.ControllerExists) { newRouteCollection.MapRoute( name: "Dynamic" + dynamicEntityMetadata.TypeName, url: dynamicEntityMetadata.TypeName + "/{action}/{id}", defaults: new { controller = dynamicEntityMetadata.TypeName, action = "Index", id = UrlParameter.Optional, typeName = dynamicEntityMetadata.TypeName } ); } else { newRouteCollection.MapRoute( name: "Dynamic" + dynamicEntityMetadata.TypeName, url: dynamicEntityMetadata.TypeName + "/{action}/{id}", defaults: new { controller = "Dynamic", action = "Index", id = UrlParameter.Optional, typeName = dynamicEntityMetadata.TypeName } ); } } foreach (var oldRoute in routeCollection.Where(x => x != firstRoute)) { newRouteCollection.Add(oldRoute); } routeCollection.Clear(); foreach (var newRoute in newRouteCollection) { routeCollection.Add(newRoute); } }
public void ContentRoute_IsAdded() { RouteCollection rc = new RouteCollection(); rc.MapContentRoute("content", MockRepository.GenerateStub<IEngine>()); Assert.That(rc.Count, Is.EqualTo(1)); Assert.That(rc.First(), Is.InstanceOf<ContentRoute>()); }
public void ContentRoute_IsInsertedBefore_NonContentRoute() { RouteCollection rc = new RouteCollection(); rc.MapRoute("mvc", "{controller}/{action}"); rc.MapContentRoute("content", MockRepository.GenerateStub<IEngine>()); Assert.That(rc.Count, Is.EqualTo(2)); Assert.That(rc.First(), Is.InstanceOf<ContentRoute>()); }
public void ContentRoute_IsAdded() { RouteCollection rc = new RouteCollection(); rc.MapContentRoute("content", MockRepository.GenerateStub <IEngine>()); Assert.That(rc.Count, Is.EqualTo(1)); Assert.That(rc.First(), Is.InstanceOf <ContentRoute>()); }
public void GenericContentRoute_IsntPushedBackBy_ContentRoute() { RouteCollection rc = new RouteCollection(); rc.MapContentRoute<Models.RegularPage>("area", MockRepository.GenerateStub<IEngine>()); rc.MapContentRoute("content", MockRepository.GenerateStub<IEngine>()); Assert.That(rc.Count, Is.EqualTo(2)); Assert.That(rc.First(), Is.InstanceOf<ContentRoute<Models.RegularPage>>()); Assert.That(rc.Skip(1).First(), Is.InstanceOf<ContentRoute>()); }
public void ContentRoute_IsInsertedBefore_NonContentRoute() { RouteCollection rc = new RouteCollection(); rc.MapRoute("mvc", "{controller}/{action}"); rc.MapContentRoute("content", MockRepository.GenerateStub <IEngine>()); Assert.That(rc.Count, Is.EqualTo(2)); Assert.That(rc.First(), Is.InstanceOf <ContentRoute>()); }
public void RoutesAreEvaluatedInOrder() { routes.Clear(); routes.MapRoute(null, "{a}/{b}", new { b = "c" }); routes.MapRoute(null, "{a}"); var httpContextMock = new Mock <HttpContextBase>(); httpContextMock.Setup(c => c.Request.AppRelativeCurrentExecutionFilePath).Returns("~/x"); Assert.IsTrue( Object.ReferenceEquals( routes.GetVirtualPath(Url.RequestContext, new RouteValueDictionary(new { a = "x" })).Route, routes.First() ) ); Assert.IsTrue( Object.ReferenceEquals( routes.GetRouteData(httpContextMock.Object).Route, routes.First() ) ); var lastRoute = routes.Last(); routes.Remove(lastRoute); routes.Insert(0, lastRoute); Assert.IsTrue( Object.ReferenceEquals( routes.GetVirtualPath(Url.RequestContext, new RouteValueDictionary(new { a = "x" })).Route, routes.First() ) ); Assert.IsTrue( Object.ReferenceEquals( routes.GetRouteData(httpContextMock.Object).Route, routes.First() ) ); }
public void RegisterRoutes_IgnoresAxd() { RouteCollection routes = new RouteCollection(); config.RegisterRoutes(routes); Route expected = new Route("{resource}.axd/{*pathInfo}", new StopRoutingHandler()); Route actual = routes.First() as Route; Assert.Equal(expected.RouteHandler.GetType(), actual.RouteHandler.GetType()); Assert.Equal(expected.Url, actual.Url); }
public void GenericContentRoute_IsntPushedBackBy_ContentRoute() { RouteCollection rc = new RouteCollection(); rc.MapContentRoute <Models.RegularPage>("area", MockRepository.GenerateStub <IEngine>()); rc.MapContentRoute("content", MockRepository.GenerateStub <IEngine>()); Assert.That(rc.Count, Is.EqualTo(2)); Assert.That(rc.First(), Is.InstanceOf <ContentRoute <Models.RegularPage> >()); Assert.That(rc.Skip(1).First(), Is.InstanceOf <ContentRoute>()); }
public void ContentRoute_IsInsertedBetween_OtherContentRoutes_AndNonContentRoute() { RouteCollection rc = new RouteCollection(); rc.MapRoute("mvc", "{controller}/{action}"); rc.MapContentRoute<Models.RegularPage>("area", MockRepository.GenerateStub<IEngine>()); rc.MapContentRoute("content", MockRepository.GenerateStub<IEngine>()); Assert.That(rc.Count, Is.EqualTo(3)); Assert.That(rc.First(), Is.InstanceOf<ContentRoute<Models.RegularPage>>()); Assert.That(rc.Skip(1).First(), Is.InstanceOf<ContentRoute>()); }
public void RegisterRoutes_IgnoresAxdRoute() { RouteCollection routes = new RouteCollection(); RouteConfig.RegisterRoutes(routes); Route expected = new Route("{resource}.axd/{*pathInfo}", new StopRoutingHandler()); Route actual = routes.First() as Route; Assert.AreEqual(expected.RouteHandler.GetType(), actual.RouteHandler.GetType()); Assert.AreEqual(expected.Url, actual.Url); }
public void ContentRoute_IsInsertedBetween_OtherContentRoutes_AndNonContentRoute() { RouteCollection rc = new RouteCollection(); rc.MapRoute("mvc", "{controller}/{action}"); rc.MapContentRoute <Models.RegularPage>("area", MockRepository.GenerateStub <IEngine>()); rc.MapContentRoute("content", MockRepository.GenerateStub <IEngine>()); Assert.That(rc.Count, Is.EqualTo(3)); Assert.That(rc.First(), Is.InstanceOf <ContentRoute <Models.RegularPage> >()); Assert.That(rc.Skip(1).First(), Is.InstanceOf <ContentRoute>()); }
/// <summary> /// 发布前。 /// </summary> /// <param name="routeDescriptors">路由描述符。</param> public void Publishing(IEnumerable<RouteDescriptor> routeDescriptors) { var preloading = new RouteCollection(); foreach (var routeDescriptor in routeDescriptors) { // WebApi 路由注册 var httpRouteDescriptor = routeDescriptor as HttpRouteDescriptor; if (httpRouteDescriptor == null) continue; var httpRouteCollection = new RouteCollection(); httpRouteCollection.MapHttpRoute(httpRouteDescriptor.Name, httpRouteDescriptor.RouteTemplate, httpRouteDescriptor.Defaults, httpRouteDescriptor.Constraints); routeDescriptor.Route = httpRouteCollection.First(); preloading.Add(routeDescriptor.Name, routeDescriptor.Route); } }
/// <summary> /// 发布前。 /// </summary> /// <param name="routeDescriptors">路由描述符。</param> public void Publishing(IEnumerable <RouteDescriptor> routeDescriptors) { var preloading = new RouteCollection(); foreach (var routeDescriptor in routeDescriptors) { // WebApi 路由注册 var httpRouteDescriptor = routeDescriptor as HttpRouteDescriptor; if (httpRouteDescriptor == null) { continue; } var httpRouteCollection = new RouteCollection(); httpRouteCollection.MapHttpRoute(httpRouteDescriptor.Name, httpRouteDescriptor.RouteTemplate, httpRouteDescriptor.Defaults, httpRouteDescriptor.Constraints); routeDescriptor.Route = httpRouteCollection.First(); preloading.Add(routeDescriptor.Name, routeDescriptor.Route); } }
public void Publish(IEnumerable<RouteDescriptor> routes) { var routesArray = routes .OrderByDescending(r => r.Priority) .ToArray(); // this is not called often, but is intended to surface problems before // the actual collection is modified var preloading = new RouteCollection(); foreach (var routeDescriptor in routesArray) { // extract the WebApi route implementation var httpRouteDescriptor = routeDescriptor as HttpRouteDescriptor; if (httpRouteDescriptor != null) { var httpRouteCollection = new RouteCollection(); httpRouteCollection.MapHttpRoute(httpRouteDescriptor.Name, httpRouteDescriptor.RouteTemplate, httpRouteDescriptor.Defaults); routeDescriptor.Route = httpRouteCollection.First(); } preloading.Add(routeDescriptor.Name, routeDescriptor.Route); } using (_routeCollection.GetWriteLock()) { // existing routes are removed while the collection is briefly inaccessable var cropArray = _routeCollection .OfType<ShellRoute>() .Where(sr => sr.ShellSettingsName == _shellSettings.Name) .ToArray(); foreach(var crop in cropArray) { _routeCollection.Remove(crop); } // new routes are added foreach (var routeDescriptor in routesArray) { // Loading session state information. var defaultSessionState = SessionStateBehavior.Default; ExtensionDescriptor extensionDescriptor = null; if(routeDescriptor.Route is Route) { object extensionId; var route = routeDescriptor.Route as Route; if(route.DataTokens != null && route.DataTokens.TryGetValue("area", out extensionId) || route.Defaults != null && route.Defaults.TryGetValue("area", out extensionId)) { extensionDescriptor = _extensionManager.GetExtension(extensionId.ToString()); } } else if(routeDescriptor.Route is IRouteWithArea) { var route = routeDescriptor.Route as IRouteWithArea; extensionDescriptor = _extensionManager.GetExtension(route.Area); } if (extensionDescriptor != null) { // if session state is not define explicitly, use the one define for the extension if (routeDescriptor.SessionState == SessionStateBehavior.Default) { Enum.TryParse(extensionDescriptor.SessionState, true /*ignoreCase*/, out defaultSessionState); } } // Route-level setting overrides module-level setting (from manifest). var sessionStateBehavior = routeDescriptor.SessionState == SessionStateBehavior.Default ? defaultSessionState : routeDescriptor.SessionState ; var shellRoute = new ShellRoute(routeDescriptor.Route, _shellSettings, _workContextAccessor, _runningShellTable) { IsHttpRoute = routeDescriptor is HttpRouteDescriptor, SessionState = sessionStateBehavior }; _routeCollection.Add(routeDescriptor.Name, shellRoute); } } }
public void Publish(IEnumerable <RouteDescriptor> routes) { var routesArray = routes .OrderByDescending(r => r.Priority) .ToArray(); // this is not called often, but is intended to surface problems before // the actual collection is modified var preloading = new RouteCollection(); foreach (var routeDescriptor in routesArray) { // extract the WebApi route implementation var httpRouteDescriptor = routeDescriptor as HttpRouteDescriptor; if (httpRouteDescriptor != null) { var httpRouteCollection = new RouteCollection(); httpRouteCollection.MapHttpRoute(httpRouteDescriptor.Name, httpRouteDescriptor.RouteTemplate, httpRouteDescriptor.Defaults); routeDescriptor.Route = httpRouteCollection.First(); } preloading.Add(routeDescriptor.Name, routeDescriptor.Route); } using (routeCollection.GetWriteLock()) { // existing routes are removed while the collection is briefly inaccessable var cropArray = routeCollection .OfType <ShellRoute>() .Where(sr => sr.ShellSettingsName == shellSettings.Name) .ToArray(); foreach (var crop in cropArray) { routeCollection.Remove(crop); } // new routes are added foreach (var routeDescriptor in routesArray) { // Loading session state information. var defaultSessionState = SessionStateBehavior.Default; ExtensionDescriptor extensionDescriptor = null; if (routeDescriptor.Route is Route) { object extensionId; var route = routeDescriptor.Route as Route; if (route.DataTokens != null && route.DataTokens.TryGetValue("area", out extensionId) || route.Defaults != null && route.Defaults.TryGetValue("area", out extensionId)) { extensionDescriptor = extensionManager.GetExtension(extensionId.ToString()); } } else if (routeDescriptor.Route is IRouteWithArea) { var route = routeDescriptor.Route as IRouteWithArea; extensionDescriptor = extensionManager.GetExtension(route.Area); } if (extensionDescriptor != null) { // if session state is not define explicitly, use the one define for the extension if (routeDescriptor.SessionState == SessionStateBehavior.Default) { Enum.TryParse(extensionDescriptor.SessionState, true /*ignoreCase*/, out defaultSessionState); } } // Route-level setting overrides module-level setting (from manifest). var sessionStateBehavior = routeDescriptor.SessionState == SessionStateBehavior.Default ? defaultSessionState : routeDescriptor.SessionState; var shellRoute = new ShellRoute(routeDescriptor.Route, shellSettings, workContextAccessor, runningShellTable) { IsHttpRoute = routeDescriptor is HttpRouteDescriptor, SessionState = sessionStateBehavior }; routeCollection.Add(routeDescriptor.Name, shellRoute); } } }
public void Publish(IEnumerable <RouteDescriptor> routes, Func <IDictionary <string, object>, Task> pipeline = null) { var routesArray = routes .OrderByDescending(r => r.Priority) .ToArray(); // this is not called often, but is intended to surface problems before // the actual collection is modified var preloading = new RouteCollection(); foreach (var routeDescriptor in routesArray) { // extract the WebApi route implementation var httpRouteDescriptor = routeDescriptor as HttpRouteDescriptor; if (httpRouteDescriptor != null) { var httpRouteCollection = new RouteCollection(); httpRouteCollection.MapHttpRoute(httpRouteDescriptor.Name, httpRouteDescriptor.RouteTemplate, httpRouteDescriptor.Defaults, httpRouteDescriptor.Constraints); routeDescriptor.Route = httpRouteCollection.First(); } preloading.Add(routeDescriptor.Name, routeDescriptor.Route); } using (_routeCollection.GetWriteLock()) { // HACK: For inserting names in internal dictionary when inserting route to RouteCollection. var routeCollectionType = typeof(RouteCollection); var namedMap = (Dictionary <string, RouteBase>)routeCollectionType.GetField("_namedMap", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(_routeCollection); // new routes are added foreach (var routeDescriptor in routesArray) { // Loading session state information. var defaultSessionState = SessionStateBehavior.Default; object extensionId = default(object); if (routeDescriptor.Route is System.Web.Routing.Route) { var route = routeDescriptor.Route as System.Web.Routing.Route; if (route.DataTokens != null && route.DataTokens.TryGetValue("area", out extensionId) || route.Defaults != null && route.Defaults.TryGetValue("area", out extensionId)) { //TODO Extension Handler //extensionDescriptor = _extensionManager.GetExtension(extensionId.ToString()); } } var shellRoute = new ShellRoute(routeDescriptor.Route, _iocManager, pipeline) { IsHttpRoute = routeDescriptor is HttpRouteDescriptor, // SessionState = sessionStateBehavior }; var area = extensionId != null?extensionId.ToString() : string.Empty; if (!namedMap.Any(t => t.Key == area)) { if (routeDescriptor.Route != null) { _routeCollection.Add(shellRoute); } namedMap[routeDescriptor.Name] = shellRoute; } } } }
public void Publish(IEnumerable <RouteDescriptor> routes, Func <IDictionary <string, object>, Task> env) { var routesArray = routes .OrderByDescending(r => r.Priority) .ToArray(); // this is not called often, but is intended to surface problems before // the actual collection is modified var preloading = new RouteCollection(); foreach (var routeDescriptor in routesArray) { // extract the WebApi route implementation var httpRouteDescriptor = routeDescriptor as HttpRouteDescriptor; if (httpRouteDescriptor != null) { var httpRouteCollection = new RouteCollection(); httpRouteCollection.MapHttpRoute(httpRouteDescriptor.Name, httpRouteDescriptor.RouteTemplate, httpRouteDescriptor.Defaults, httpRouteDescriptor.Constraints); routeDescriptor.Route = httpRouteCollection.First(); } preloading.Add(routeDescriptor.Name, routeDescriptor.Route); } using (_routeCollection.GetWriteLock()) { // existing routes are removed while the collection is briefly inaccessable _routeCollection .OfType <HubRoute>() .ToList().ForEach(x => x.ReleaseShell(_shellSettings)); // HACK: For inserting names in internal dictionary when inserting route to RouteCollection. var routeCollectionType = typeof(RouteCollection); var namedMap = (Dictionary <string, RouteBase>)routeCollectionType.GetField("_namedMap", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(_routeCollection); // new routes are added foreach (var routeDescriptor in routesArray) { // Loading session state information. var defaultSessionState = SessionStateBehavior.Default; ExtensionDescriptor extensionDescriptor = null; if (routeDescriptor.Route is Route) { object extensionId; var route = routeDescriptor.Route as Route; if (route.DataTokens != null && route.DataTokens.TryGetValue("area", out extensionId) || route.Defaults != null && route.Defaults.TryGetValue("area", out extensionId)) { extensionDescriptor = _extensionManager.GetExtension(extensionId.ToString()); } } else if (routeDescriptor.Route is IRouteWithArea) { var route = routeDescriptor.Route as IRouteWithArea; extensionDescriptor = _extensionManager.GetExtension(route.Area); } if (extensionDescriptor != null) { // if session state is not define explicitly, use the one define for the extension if (routeDescriptor.SessionState == SessionStateBehavior.Default) { Enum.TryParse(extensionDescriptor.SessionState, true /*ignoreCase*/, out defaultSessionState); } } // Route-level setting overrides module-level setting (from manifest). var sessionStateBehavior = routeDescriptor.SessionState == SessionStateBehavior.Default ? defaultSessionState : routeDescriptor.SessionState; var shellRoute = new ShellRoute(routeDescriptor.Route, _shellSettings, _workContextAccessor, _runningShellTable, env) { IsHttpRoute = routeDescriptor is HttpRouteDescriptor, SessionState = sessionStateBehavior }; var area = extensionDescriptor == null ? "" : extensionDescriptor.Id; var matchedHubRoute = _routeCollection.FirstOrDefault(x => { var hubRoute = x as HubRoute; if (hubRoute == null) { return(false); } return(routeDescriptor.Priority == hubRoute.Priority && hubRoute.Area.Equals(area, StringComparison.OrdinalIgnoreCase) && hubRoute.Name == routeDescriptor.Name); }) as HubRoute; if (matchedHubRoute == null) { matchedHubRoute = new HubRoute(routeDescriptor.Name, area, routeDescriptor.Priority, _runningShellTable); int index; for (index = 0; index < _routeCollection.Count; index++) { var hubRoute = _routeCollection[index] as HubRoute; if (hubRoute == null) { continue; } if (hubRoute.Priority < matchedHubRoute.Priority) { break; } } _routeCollection.Insert(index, matchedHubRoute); // HACK: For inserting names in internal dictionary when inserting route to RouteCollection. if (!string.IsNullOrEmpty(matchedHubRoute.Name) && !namedMap.ContainsKey(matchedHubRoute.Name)) { namedMap[matchedHubRoute.Name] = matchedHubRoute; } } matchedHubRoute.Add(shellRoute, _shellSettings); } } }
public void Publish(IEnumerable<RouteDescriptor> routes) { var routesArray = routes .OrderByDescending(r => r.Priority) .ToArray(); // this is not called often, but is intended to surface problems before // the actual collection is modified var preloading = new RouteCollection(); foreach (var routeDescriptor in routesArray) { // extract the WebApi route implementation var httpRouteDescriptor = routeDescriptor as HttpRouteDescriptor; if (httpRouteDescriptor != null) { var httpRouteCollection = new RouteCollection(); httpRouteCollection.MapHttpRoute(httpRouteDescriptor.Name, httpRouteDescriptor.RouteTemplate, httpRouteDescriptor.Defaults, httpRouteDescriptor.Constraints); routeDescriptor.Route = httpRouteCollection.First(); } preloading.Add(routeDescriptor.Name, routeDescriptor.Route); } using (_routeCollection.GetWriteLock()) { // existing routes are removed while the collection is briefly inaccessable _routeCollection .OfType<HubRoute>() .ForEach(x => x.ReleaseShell(_shellSettings)); // new routes are added foreach (var routeDescriptor in routesArray) { // Loading session state information. var defaultSessionState = SessionStateBehavior.Default; ExtensionDescriptor extensionDescriptor = null; if(routeDescriptor.Route is Route) { object extensionId; var route = routeDescriptor.Route as Route; if(route.DataTokens != null && route.DataTokens.TryGetValue("area", out extensionId) || route.Defaults != null && route.Defaults.TryGetValue("area", out extensionId)) { extensionDescriptor = _extensionManager.GetExtension(extensionId.ToString()); } } else if(routeDescriptor.Route is IRouteWithArea) { var route = routeDescriptor.Route as IRouteWithArea; extensionDescriptor = _extensionManager.GetExtension(route.Area); } if (extensionDescriptor != null) { // if session state is not define explicitly, use the one define for the extension if (routeDescriptor.SessionState == SessionStateBehavior.Default) { Enum.TryParse(extensionDescriptor.SessionState, true /*ignoreCase*/, out defaultSessionState); } } // Route-level setting overrides module-level setting (from manifest). var sessionStateBehavior = routeDescriptor.SessionState == SessionStateBehavior.Default ? defaultSessionState : routeDescriptor.SessionState ; var shellRoute = new ShellRoute(routeDescriptor.Route, _shellSettings, _workContextAccessor, _runningShellTable) { IsHttpRoute = routeDescriptor is HttpRouteDescriptor, SessionState = sessionStateBehavior }; var area = extensionDescriptor == null ? "" : extensionDescriptor.Id; var matchedHubRoute = _routeCollection.FirstOrDefault(x => { var hubRoute = x as HubRoute; if (hubRoute == null) { return false; } return routeDescriptor.Priority == hubRoute.Priority && hubRoute.Area.Equals(area, StringComparison.OrdinalIgnoreCase) && hubRoute.Name == routeDescriptor.Name; }) as HubRoute; if (matchedHubRoute == null) { matchedHubRoute = new HubRoute(routeDescriptor.Name, area, routeDescriptor.Priority, _runningShellTable); int index; for (index = 0; index < _routeCollection.Count; index++) { var hubRoute = _routeCollection[index] as HubRoute; if (hubRoute == null) { continue; } if (hubRoute.Priority < matchedHubRoute.Priority) { break; } } _routeCollection.Insert(index, matchedHubRoute); } matchedHubRoute.Add(shellRoute, _shellSettings); } } }