How do I programatically list all routes in .NET Core Web API project?

4.2k Views Asked by At

I have an ASP.NET Core 5 Web API where routes are not matched. It works fine locally, but it's not working on the server. The logs show me

No candidates found for the request path

but I see the request path and it is correct.

I would like to log all the routes, just to see what my application thinks are the routes. It may help to see what is different on the server.

2

There are 2 best solutions below

3
Korfu On

I would suggest using Swagger. It is a very common tool that lists all of the API controllers, endpoints and models. Setting it up for .Net 5 is well documented in Microsoft's sources: https://learn.microsoft.com/en-us/aspnet/core/tutorials/web-api-help-pages-using-swagger?view=aspnetcore-5.0#swagger-ui

2
Jesse Johnson On

Try the following:

  1. Add IActionDescriptorCollectionProvider (from Microsoft.AspNetCore.Mvc.Infrastructure) as a parameter to Configure(...) within Startup.cs.
  2. Iterate over ActionDescriptors of IActionDescriptorCollectionProvider.

Example

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILogger log, IActionDescriptorCollectionProvider actionProvider)
{
    // configuration

    app.UseMvc();

    var routes = actionProvider.ActionDescriptors.Items
        .Where(x => x.AttributeRouteInfo != null);

    foreach(var route in routes)
    {
        log.LogDebug($"{route.AttributeRouteInfo.Template}");
    }
}