Get all registered routes in ASP.NET Core
You can take an ActionDescriptor
collection from IActionDescriptorCollectionProvider
.
In there, you can see all actions referred to in the project and can take an AttributeRouteInfo
or RouteValues
, which contain all information about the routes.
Example:
using System.Linq;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Infrastructure;
public class EnvironmentController : Controller
{
private readonly IActionDescriptorCollectionProvider _actionDescriptorCollectionProvider;
public EnvironmentController(IActionDescriptorCollectionProvider actionDescriptorCollectionProvider)
{
_actionDescriptorCollectionProvider = actionDescriptorCollectionProvider;
}
[HttpGet("routes", Name = "ApiEnvironmentGetAllRoutes")]
[Produces(typeof(ListResult<RouteModel>))]
public IActionResult GetAllRoutes()
{
var result = new ListResult<RouteModel>();
var routes = _actionDescriptorCollectionProvider.ActionDescriptors.Items.Where(
ad => ad.AttributeRouteInfo != null).Select(ad => new RouteModel
{
Name = ad.AttributeRouteInfo.Name,
Template = ad.AttributeRouteInfo.Template
}).ToList();
if (routes != null && routes.Any())
{
result.Items = routes;
result.Success = true;
}
return Ok(result);
}
}
internal class RouteModel
{
public string Name { get; set; }
public string Template { get; set; }
}
internal class ListResult<T>
{
public ListResult()
{
}
public List<RouteModel> Items { get; internal set; }
public bool Success { get; internal set; }
}
I've created the NuGet package "AspNetCore.RouteAnalyzer" that provides a feature to get all route information.
- NuGet Gallery | AspNetCore.RouteAnalyzer ... Package on NuGet Gallery
- kobake/AspNetCore.RouteAnalyzer ... Usage guide
Try it if you'd like.
Usage
Package Manager Console
PM> Install-Package AspNetCore.RouteAnalyzer
Startup.cs
using AspNetCore.RouteAnalyzer; // Add
.....
public void ConfigureServices(IServiceCollection services)
{
....
services.AddRouteAnalyzer(); // Add
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
....
app.UseMvc(routes =>
{
routes.MapRouteAnalyzer("/routes"); // Add
....
});
}
Browse
Run project and you can access the url /routes
to view all route information of your project.