According to your description, you could try to use IActionDescriptorCollectionProvider to get all controller routes.
More details, you could refer to below codes:
Interface:
public interface IGetRoute
{
IList<RouteModel> GetRotue(string type);
}
Class:
public class GetRoute : IGetRoute
{
private readonly IActionDescriptorCollectionProvider _actionDescriptorCollectionProvider;
public GetRoute(IActionDescriptorCollectionProvider actionDescriptorCollectionProvider)
{
_actionDescriptorCollectionProvider = actionDescriptorCollectionProvider;
}
public IList<RouteModel> GetRotue(string type)
{
var typename = type.Replace("Controller", "");
List<RouteModel> result = new List<RouteModel>();
foreach (ActionDescriptor _e in _actionDescriptorCollectionProvider.ActionDescriptors.Items)
{
if (_e.AttributeRouteInfo != null)
{
if (_e.AttributeRouteInfo.Template.Contains(typename))
{
result.Add(new RouteModel() { Name = _e.AttributeRouteInfo.Template, ControllerName = typename });
}
} else if (_e is ControllerActionDescriptor)
{
var e = _e as ControllerActionDescriptor;
if (e.ControllerName == typename)
{
result.Add(new RouteModel() { Name = $"/{e.ControllerName}/{e.ActionName}", ControllerName = typename });
}
}
}
return result;
}
}
Register in ConfigureServices method:
services.AddScoped<IGetRoute, GetRoute>();
Usage:
var res = _route.GetRotue(typeof(MyTestController).Name);
var res2 = _route.GetRotue(typeof(HomeController).Name);
Result:

RouteAttributeinheritance