/// <summary> /// 设置Html信息 /// </summary> /// <param name="routeInformation">路由信息</param> /// <param name="controllerActionDescriptor">控制器</param> private void SetHtmlInfo(RouteInformation routeInformation, ControllerActionDescriptor controllerActionDescriptor) { var htmlAttribute = controllerActionDescriptor.ControllerTypeInfo.GetCustomAttribute <RazorHtmlAttribute>() ?? controllerActionDescriptor.MethodInfo.GetCustomAttribute <RazorHtmlAttribute>(); if (htmlAttribute == null) { return; } routeInformation.FilePath = htmlAttribute.Path; routeInformation.TemplatePath = htmlAttribute.Template; routeInformation.IsPartialView = htmlAttribute.IsPartialView; routeInformation.ViewName = htmlAttribute.ViewName; }
/// <summary> /// 获取所有路由信息 /// </summary> public IEnumerable <RouteInformation> GetAllRouteInformations() { var list = new List <RouteInformation>(); var actionDescriptors = this._actionDescriptorCollectionProvider.ActionDescriptors.Items; foreach (var actionDescriptor in actionDescriptors) { var info = new RouteInformation(); if (actionDescriptor.RouteValues.ContainsKey("area")) { info.AreaName = actionDescriptor.RouteValues["area"]; } // Razor页面路径以及调用 if (actionDescriptor is PageActionDescriptor pageActionDescriptor) { info.Path = pageActionDescriptor.ViewEnginePath; info.Invocation = pageActionDescriptor.RelativePath; } // 路由属性路径 if (actionDescriptor.AttributeRouteInfo != null) { info.Path = $"/{actionDescriptor.AttributeRouteInfo.Template}"; } // Controller/Action 的路径以及调用 if (actionDescriptor is ControllerActionDescriptor controllerActionDescriptor) { if (info.Path.IsEmpty()) { info.Path = $"/{controllerActionDescriptor.ControllerName}/{controllerActionDescriptor.ActionName}"; } SetHtmlInfo(info, controllerActionDescriptor); info.ControllerName = controllerActionDescriptor.ControllerName; info.ActionName = controllerActionDescriptor.ActionName; info.Invocation = $"{controllerActionDescriptor.ControllerName}Controller.{controllerActionDescriptor.ActionName}"; } info.Invocation += $"({actionDescriptor.DisplayName})"; list.Add(info); } return(list); }