public void GetVirtualPathForAreaDoesNotStripAreaTokenIfAreasNotInUse()
        {
            // Arrange
            RouteCollection routes = new RouteCollection();

            routes.MapRoute(
                "Default",
                "no-area/{controller}/{action}/{id}",
                new { controller = "Home", action = "Index", id = "" }
                );

            RequestContext       requestContext = GetRequestContext(null);
            RouteValueDictionary values         = new RouteValueDictionary()
            {
                { "controller", "home" },
                { "action", "about" },
                { "area", "some-area" }
            };

            // Act
            VirtualPathData vpd = routes.GetVirtualPathForArea(requestContext, values);

            // Assert
            Assert.NotNull(vpd);
            Assert.Equal(routes["Default"], vpd.Route);

            // note presence of 'area' query string parameter; RVD should not be modified if areas not in use
            Assert.Equal("/app/no-area/home/about?area=some-area", vpd.VirtualPath);
        }
        public void GetVirtualPathForAreaDoesNotStripAreaTokenIfAreasNotInUse()
        {
            // Arrange
            RouteCollection routes = new RouteCollection();
            routes.MapRoute(
                "Default",
                "no-area/{controller}/{action}/{id}",
                new { controller = "Home", action = "Index", id = "" }
                );

            RequestContext requestContext = GetRequestContext(null);
            RouteValueDictionary values = new RouteValueDictionary()
            {
                { "controller", "home" },
                { "action", "about" },
                { "area", "some-area" }
            };

            // Act
            VirtualPathData vpd = routes.GetVirtualPathForArea(requestContext, values);

            // Assert
            Assert.NotNull(vpd);
            Assert.Equal(routes["Default"], vpd.Route);

            // note presence of 'area' query string parameter; RVD should not be modified if areas not in use
            Assert.Equal("/app/no-area/home/about?area=some-area", vpd.VirtualPath);
        }
示例#3
0
        public static string GenerateUrl(string routeName, string actionName, string controllerName, RouteValueDictionary routeValues, RouteCollection routeCollection, RequestContext requestContext, bool includeImplicitMvcValues)
        {
            if (routeCollection == null)
            {
                throw new ArgumentNullException("routeCollection");
            }

            if (requestContext == null)
            {
                throw new ArgumentNullException("requestContext");
            }

            RouteValueDictionary mergedRouteValues = RouteValuesHelpers.MergeRouteValues(actionName, controllerName, requestContext.RouteData.Values, routeValues, includeImplicitMvcValues);

            VirtualPathData vpd = routeCollection.GetVirtualPathForArea(requestContext, routeName, mergedRouteValues);

            if (vpd == null)
            {
                return(null);
            }

            string modifiedUrl = PathHelpers.GenerateClientUrl(requestContext.HttpContext, vpd.VirtualPath);

            return(modifiedUrl);
        }
示例#4
0
        private string BuildUrlFromExpression <TController>(RequestContext context, RouteCollection routeCollection, Expression <Action <TController> > action) where TController : Controller
        {
            RouteValueDictionary routeValues = GetRouteValuesFromExpression(action);
            VirtualPathData      vpd         = routeCollection.GetVirtualPathForArea(context, routeValues);

            return((vpd == null) ? null : vpd.VirtualPath);
        }
        public void GenerateLink_ToArea_ActionRoute_WithPrefix_WithinController()
        {
            // Arrange
            Type[] controllerTypes = new Type[]
            {
                typeof(AreaWithPrefixWithControllerRouteController)
            };
            RouteCollection routes         = MapControllers(controllerTypes);
            RequestContext  requestContext = GetRequestContext();

            requestContext.RouteData.DataTokens.Add("area", "Administration");
            requestContext.RouteData.DataTokens.Add(
                "controller",
                "AreaWithPrefixWithControllerRoute"
                );

            RouteValueDictionary values = new RouteValueDictionary()
            {
                { "action", "A2" },
            };

            // Act
            VirtualPathData vpd = routes.GetVirtualPathForArea(requestContext, values);

            // Assert
            Assert.NotNull(vpd);
            Assert.Equal("/Admin", vpd.VirtualPath);
        }
示例#6
0
        public static string BuildUrlFromExpression <TController>(RequestContext context, RouteCollection routeCollection, Expression <Action <TController> > action) where TController : Controller
        {
            var             routeInfo = ExpressionHelper.GetRouteInfoFromExpression(routeCollection, action);
            VirtualPathData vpd       = routeCollection.GetVirtualPathForArea(context, routeInfo.Key, routeInfo.Value);

            return((vpd == null) ? null : vpd.VirtualPath);
        }
示例#7
0
        public void GetVirtualPathForAreaForwardsCallIfRouteNameSpecified()
        {
            // Arrange
            RouteCollection      routes         = GetRouteCollection();
            RequestContext       requestContext = GetRequestContext(null);
            RouteValueDictionary values         = new RouteValueDictionary()
            {
                { "controller", "home" },
                { "action", "index" },
                { "area", "some-area" }
            };

            // Act
            VirtualPathData vpd = routes.GetVirtualPathForArea(
                requestContext,
                "admin_default",
                values
                );

            // Assert
            Assert.NotNull(vpd);
            Assert.Equal(routes["admin_default"], vpd.Route);

            // note presence of 'area' query string parameter; RVD should not be modified if route name was provided
            Assert.Equal("/app/admin-area?area=some-area", vpd.VirtualPath);
        }
示例#8
0
        public static string GenerateUrl(string routeName, string actionName, string controllerName, RouteValueDictionary routeValues, RouteCollection routeCollection, RequestContext requestContext, bool includeImplicitMvcValues, IEnumerable <string> arrayParameter)
        {
            if (routeCollection == null)
            {
                throw new ArgumentNullException("routeCollection");
            }
            if (requestContext == null)
            {
                throw new ArgumentNullException("requestContext");
            }
            RouteValueDictionary values = MergeRouteValues(actionName, controllerName, requestContext.RouteData.Values, routeValues, includeImplicitMvcValues, arrayParameter);
            VirtualPathData      data   = routeCollection.GetVirtualPathForArea(requestContext, routeName, values);

            if (data == null)
            {
                return(null);
            }
            return(GenerateClientUrl(requestContext.HttpContext, data.VirtualPath));
        }
        public void GetVirtualPathForAreaWillNotJumpBetweenAreasImplicitly()
        {
            // Arrange
            RouteCollection      routes         = GetRouteCollection();
            RequestContext       requestContext = GetRequestContext("admin");
            RouteValueDictionary values         = new RouteValueDictionary()
            {
                { "controller", "home" },
                { "action", "tenmostrecent" },
                { "tag", "some-tag" }
            };

            // Act
            VirtualPathData vpd = routes.GetVirtualPathForArea(requestContext, values);

            // Assert
            Assert.NotNull(vpd);
            Assert.Equal(routes["admin_default"], vpd.Route);
            Assert.Equal("/app/admin-area/home/tenmostrecent?tag=some-tag", vpd.VirtualPath);
        }
示例#10
0
        public void GenerateLink_MultiplControllerRoutesMatch(Type c1, Type c2)
        {
            // Arrange
            Type[]          controllerTypes = new Type[] { c1, c2 };
            RouteCollection routes          = MapControllers(controllerTypes);
            RequestContext  requestContext  = GetRequestContext();

            RouteValueDictionary values = new RouteValueDictionary()
            {
                { "action", "A1" },
                { "controller", "Controller1" }
            };

            // Act
            VirtualPathData vpd = routes.GetVirtualPathForArea(requestContext, values);

            // Assert
            Assert.NotNull(vpd);
            Assert.Equal("/c1/A1", vpd.VirtualPath);
        }
        public void GetVirtualPathForAreaWillJumpBetweenAreasExplicitly()
        {
            // Arrange
            RouteCollection      routes         = GetRouteCollection();
            RequestContext       requestContext = GetRequestContext(null);
            RouteValueDictionary values         = new RouteValueDictionary()
            {
                { "controller", "home" },
                { "action", "tenmostrecent" },
                { "tag", "some-tag" },
                { "area", "blog" }
            };

            // Act
            VirtualPathData vpd = routes.GetVirtualPathForArea(requestContext, values);

            // Assert
            Assert.NotNull(vpd);
            Assert.Equal(routes["blog_whatsnew"], vpd.Route);
            Assert.Equal("/app/whats-new/some-tag", vpd.VirtualPath);
        }
示例#12
0
        public static string GenerateUrl(out IDynamicNode node, string routeName, string actionName, string controllerName, RouteValueDictionary routeValues, RouteCollection routeCollection, RequestContext requestContext, bool includeImplicitMvcValues)
        {
            if (routeCollection == null)
            {
                throw new ArgumentNullException("routeCollection");
            }
            if (requestContext == null)
            {
                throw new ArgumentNullException("requestContext");
            }
            var values = RouteValuesHelpers.MergeRouteValues(actionName, controllerName, requestContext.RouteData.Values, routeValues, includeImplicitMvcValues);
            var data   = routeCollection.GetVirtualPathForArea(requestContext, routeName, values);

            if (data == null)
            {
                node = null;
                return(null);
            }
            node = (IDynamicNode)data.DataTokens["dynamicNode"];
            return(PathHelpers.GenerateClientUrl(requestContext.HttpContext, data.VirtualPath));
        }
        public void GenerateLink_ToController_PrefersActionRoute()
        {
            // Arrange
            Type[]          controllerTypes = new Type[] { typeof(MixedRoutingController) };
            RouteCollection routes          = MapControllers(controllerTypes);
            RequestContext  requestContext  = GetRequestContext();

            requestContext.RouteData.DataTokens.Add("controller", "MixedRouting");

            RouteValueDictionary values = new RouteValueDictionary()
            {
                { "action", "A2" },
            };

            // Act
            VirtualPathData vpd = routes.GetVirtualPathForArea(requestContext, values);

            // Assert
            Assert.NotNull(vpd);
            Assert.Equal("/A2", vpd.VirtualPath);
            Assert.True(((Route)vpd.Route).GetTargetIsAction());
        }
示例#14
0
        internal static string GenerateUrl(string routeName, string actionName, string controllerName, RouteValueDictionary routeValues, RouteCollection routeCollection, RequestContext requestContext, bool includeImplicitMvcValues) {
            RouteValueDictionary mergedRouteValues = RouteValuesHelpers.MergeRouteValues(actionName, controllerName, requestContext.RouteData.Values, routeValues, includeImplicitMvcValues);

            VirtualPathData vpd = routeCollection.GetVirtualPathForArea(requestContext, routeName, mergedRouteValues);
            if (vpd == null) {
                return null;
            }

            string modifiedUrl = PathHelpers.GenerateClientUrl(requestContext.HttpContext, vpd.VirtualPath);
            return modifiedUrl;
        }
示例#15
0
        public static string GenerateUrl(string routeName, string actionName, string controllerName, RouteValueDictionary routeValues, RouteCollection routeCollection, RequestContext requestContext, bool includeImplicitMvcValues)
        {
            if (routeCollection == null)
            {
                throw new ArgumentNullException("routeCollection");
            }

            if (requestContext == null)
            {
                throw new ArgumentNullException("requestContext");
            }

            RouteValueDictionary mergedRouteValues = RouteValuesHelpers.MergeRouteValues(actionName, controllerName, requestContext.RouteData.Values, routeValues, includeImplicitMvcValues);

            VirtualPathData vpd = routeCollection.GetVirtualPathForArea(requestContext, routeName, mergedRouteValues);
            if (vpd == null)
            {
                return null;
            }

            string modifiedUrl = UrlUtil.GenerateClientUrl(requestContext.HttpContext, vpd.VirtualPath);
            return modifiedUrl;
        }