public IList <RouteInfo> GetAllRouteInfo() { List <RouteInfo> list = new List <RouteInfo>(); var routeCollection = this.actionDescriptorCollectionProvider.ActionDescriptors.Items; foreach (ActionDescriptor route in routeCollection) { RouteInfo info = new RouteInfo(); // Area if (route.RouteValues.ContainsKey("area")) { info.Area = route.RouteValues["area"]; } // Path and Invocation of Razor Pages if (route is PageActionDescriptor) { var e = route as PageActionDescriptor; info.Path = e.ViewEnginePath; info.Namespace = e.RelativePath; } // Path of Route Attribute if (route.AttributeRouteInfo != null) { var e = route; info.Path = $"/{e.AttributeRouteInfo.Template}"; this.AddParameters(info, e); } if (route is ControllerActionDescriptor) { var e = route as ControllerActionDescriptor; info.ControllerName = e.ControllerName; info.ActionName = e.ActionName; info.Namespace = e.ControllerTypeInfo.AsType().Namespace; if (string.IsNullOrEmpty(e.AttributeRouteInfo?.Template)) { if (!string.IsNullOrEmpty(info.Area)) { info.Path = $"/{info.Area}"; } info.Path += $"/{e.ControllerName}/{e.ActionName}"; } this.AddParameters(info, e); } // Extract HTTP Verb if (route.ActionConstraints != null && route.ActionConstraints.Select(t => t.GetType()).Contains(typeof(HttpMethodActionConstraint))) { if (route.ActionConstraints.FirstOrDefault(a => a.GetType() == typeof(HttpMethodActionConstraint)) is HttpMethodActionConstraint httpMethodAction) { info.HttpMethods = string.Join(",", httpMethodAction.HttpMethods); } } list.Add(info); } return(list); }