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 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); }
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); }
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); }
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); }
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); }
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); }
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()); }
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; }
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; }