/// <summary> /// Adds a folder route for all pages in the specified area and under the specified area folder. /// These pages can be routed via their names prefixed by folder route in addition to the default /// set of path based routes. Links generated for these pages will use the specified folder route. /// </summary> public static PageConventionCollection AddAreaFolderRoute(this PageConventionCollection conventions, string areaName, string folderPath, string folderRoute) { conventions.AddAreaFolderRouteModelConvention(areaName, folderPath, model => { foreach (var selector in model.Selectors.ToArray()) { if (selector.AttributeRouteModel.Template.StartsWith(areaName)) { selector.AttributeRouteModel.SuppressLinkGeneration = true; var template = (folderRoute.Trim('/') + '/' + selector.AttributeRouteModel .Template.Substring(areaName.Length).TrimStart('/')).TrimEnd('/'); model.Selectors.Add(new SelectorModel { AttributeRouteModel = new AttributeRouteModel { Template = template } }); } } }); return(conventions); }
internal static PageConventionCollection AddAreaFolderRouteInternal(this PageConventionCollection conventions, string areaName, string folderPath, string folderRoute, bool isAdmin) { conventions.AddAreaFolderRouteModelConvention(areaName, folderPath, model => { if (isAdmin != (model.ViewEnginePath.Contains("/Admin/") || model.Properties.ContainsKey("Admin"))) { return; } var areaFolder = areaName + folderPath; foreach (var selector in model.Selectors.ToArray()) { var route = selector.AttributeRouteModel; if (route.Template.StartsWith(areaFolder, StringComparison.Ordinal) || (route.Template == areaName && folderPath == "/")) { route.SuppressLinkGeneration = true; string template; if (route.Template == areaName && folderPath == "/") { template = folderRoute; } else { var cleanSubTemplate = route.Template.Substring(areaFolder.Length).TrimStart('/'); template = AttributeRouteModel.CombineTemplates(folderRoute, cleanSubTemplate); } model.Selectors.Add(new SelectorModel { AttributeRouteModel = new AttributeRouteModel { Template = template } }); } } }); return(conventions); }