コード例 #1
0
        private IEnumerable <RouteDataItemModel> ProcessRouteData(MvcRouteValueDictionary dataDefaults,
                                                                  RouteDataMessage routeMessage)
        {
            if (dataDefaults == null || dataDefaults.Count == 0)
            {
                return(null);
            }

            List <RouteDataItemModel> routeData = new List <RouteDataItemModel>();

            foreach (KeyValuePair <string, object> dataDefault in dataDefaults)
            {
                RouteDataItemModel routeDataItemModel = new RouteDataItemModel();
                routeDataItemModel.PlaceHolder  = dataDefault.Key;
                routeDataItemModel.DefaultValue = dataDefault.Value;

                if (routeMessage != null && routeMessage.Values != null)
                {
                    routeDataItemModel.ActualValue = routeMessage.Values[dataDefault.Key];
                }

                routeData.Add(routeDataItemModel);
            }

            return(routeData);
        }
コード例 #2
0
        public void MatchConstraintMessageToRoute(Routes tab, ITabContext context, System.Web.Routing.IRouteConstraint constraint, RoutesInspector routeInspector, IInspectorContext routeInspectorContext)
        {
            var route = new System.Web.Routing.Route("url", new System.Web.Routing.RouteValueDictionary {
                { "Test", "Other" }
            }, new System.Web.Routing.RouteValueDictionary {
                { "Test", constraint }
            }, new System.Web.Routing.RouteValueDictionary {
                { "Data", "Tokens" }
            }, new System.Web.Routing.PageRouteHandler("~/Path"));

            System.Web.Routing.RouteTable.Routes.Clear();
            System.Web.Routing.RouteTable.Routes.Add(route);

            routeInspectorContext.Setup(x => x.ProxyFactory).Returns(new CastleDynamicProxyFactory(routeInspectorContext.Logger, routeInspectorContext.MessageBroker, () => new ExecutionTimer(new Stopwatch()), () => new RuntimePolicy()));
            routeInspector.Setup(routeInspectorContext);

            route = (System.Web.Routing.Route)System.Web.Routing.RouteTable.Routes[0];

            var routeMessage = new RouteDataMessage(route.GetHashCode(), new System.Web.Routing.RouteData(), "routeName")
                               .AsSourceMessage(route.GetType(), null)
                               .AsTimedMessage(new TimerResult {
                Duration = TimeSpan.FromMilliseconds(19)
            });
            var constraintMessage = new ProcessConstraintMessage(route.GetHashCode(), constraint.GetHashCode(), true, "test", constraint, (System.Web.Routing.RouteValueDictionary)null, System.Web.Routing.RouteDirection.IncomingRequest)
                                    .AsTimedMessage(new TimerResult {
                Duration = TimeSpan.FromMilliseconds(25)
            })
                                    .AsSourceMessage(route.GetType(), null);

            context.TabStore.Setup(mb => mb.Contains(typeof(IList <ProcessConstraintMessage>).AssemblyQualifiedName)).Returns(true).Verifiable();
            context.TabStore.Setup(mb => mb.Contains(typeof(IList <RouteDataMessage>).AssemblyQualifiedName)).Returns(true).Verifiable();

            context.TabStore.Setup(mb => mb.Get(typeof(IList <ProcessConstraintMessage>).AssemblyQualifiedName)).Returns(new List <ProcessConstraintMessage> {
                constraintMessage
            }).Verifiable();
            context.TabStore.Setup(mb => mb.Get(typeof(IList <RouteDataMessage>).AssemblyQualifiedName)).Returns(new List <RouteDataMessage> {
                routeMessage
            }).Verifiable();

            var model     = tab.GetData(context) as List <RouteModel>;
            var itemModel = model[0];

            Assert.NotNull(model);
            Assert.Equal(1, model.Count);
            Assert.NotNull(itemModel.Constraints);
            Assert.True(itemModel.IsMatch);
            Assert.Equal("Test", ((List <RouteConstraintModel>)itemModel.Constraints)[0].ParameterName);
            Assert.Equal(true, ((List <RouteConstraintModel>)itemModel.Constraints)[0].IsMatch);
            Assert.NotNull(itemModel.DataTokens);
            Assert.Equal("Tokens", itemModel.DataTokens["Data"]);
            Assert.NotNull(itemModel.RouteData);
            Assert.Equal("Other", ((List <RouteDataItemModel>)itemModel.RouteData)[0].DefaultValue);
        }
コード例 #3
0
        private RouteModel GetRouteModelForRoute(ITabContext context, MvcRouteBase routeBase,
                                                 Dictionary <int, List <RouteDataMessage> > routeMessages,
                                                 Dictionary <int, Dictionary <int, List <ProcessConstraintMessage> > > constraintMessages)
        {
            RouteModel routeModel = new RouteModel();

            RouteDataMessage routeMessage = SafeFirstOrDefault(routeMessages.GetValueOrDefault(routeBase.GetHashCode()));

            if (routeMessage != null)
            {
                routeModel.Duration = routeMessage.Duration;
                routeModel.IsMatch  = routeMessage.IsMatch;
            }

            MvcRoute route = routeBase as MvcRoute;

            if (route != null)
            {
                routeModel.Area = (route.DataTokens != null && route.DataTokens.ContainsKey("area"))
                                        ? route.DataTokens["area"].ToString() : null;
                routeModel.Url = route.Url;

                // Append localizations if possible
                LocalizationCollectionRoute localizationCollectionRoute = null;
                FieldInfo fieldInfo = route.GetType().GetField("__target");

                if (fieldInfo != null)
                {
                    localizationCollectionRoute = fieldInfo.GetValue(route) as LocalizationCollectionRoute;
                }

                if (localizationCollectionRoute != null)
                {
                    routeModel.Url += " (LocalizationRoute)";
                    routeModel.Url += Environment.NewLine;

                    foreach (LocalizationRoute localizationRoute in
                             localizationCollectionRoute.LocalizedRoutes.OrderBy(x => x.Culture))
                    {
                        routeModel.Url += string.Format(Environment.NewLine + "{0} ({1})", localizationRoute.Url(),
                                                        !string.IsNullOrEmpty(localizationRoute.Culture) ? localizationRoute.Culture : "neutral");
                    }

                    if (!localizationCollectionRoute.LocalizedRoutes.Any())
                    {
                        routeModel.Url += Environment.NewLine + "! No translations exists - this route will not be accessible !";
                    }
                }

                routeModel.RouteData   = ProcessRouteData(route.Defaults, routeMessage);
                routeModel.Constraints = ProcessConstraints(context, route, constraintMessages);
                routeModel.DataTokens  = ProcessDataTokens(route.DataTokens);
            }
            else
            {
                routeModel.Url = routeBase.ToString();
            }

            IRouteNameMixin routeName = routeBase as IRouteNameMixin;

            if (routeName != null)
            {
                routeModel.Name = routeName.Name;
            }

            return(routeModel);
        }