Перейти к содержанию

Список всех маршрутов в ASP.NET Core

Когда ваше приложение ASP.NET Core станет достаточно большим, вам может понадобиться полное представление обо всех маршрутах. Существует несколько способов объявления маршрутов. Вы можете использовать минимальные API, контроллеры, Razor Pages, gRPC, HealthCheck и т. д. Но все они используют одну и ту же систему маршрутизации под капотом.

Коллекция маршрутов может быть указана путем извлечения коллекции EndpointDataSource из DI.

Пример для минимальных API:

if (app.Environment.IsDevelopment())
{
  app.MapGet("/debug/routes", 
   (IEnumerable<EndpointDataSource> sources) =>
    string.Join("\n", sources.SelectMany(s => s.Endpoints)));
}

Добавление этого блока в пример приложения из документации выведет следующие маршруты:

HTTP: GET /
HTTP: GET /todoitems
HTTP: GET /todoitems/complete
HTTP: GET /todoitems/{id}
HTTP: POST /todoitems
HTTP: PUT /todoitems/{id}
HTTP: DELETE /todoitems/{id}
HTTP: GET /debug/routes

Если используются полноценные контроллеры, EndpointDataSource можно получить из сервисов. Также можно использовать различные свойства полученных маршрутов, чтобы вывести нужную информацию:

public string Get([FromServices] 
 IEnumerable<EndpointDataSource> sources)
{
  var sb = new StringBuilder();
  var endpoints = 
    sources.SelectMany(s => s.Endpoints);
  foreach (var e in endpoints)
  {
    sb.AppendLine(e.DisplayName);

    if (e is RouteEndpoint re)
      sb.AppendLine(re.RoutePattern.RawText); 
  }

  return sb.ToString();
}

Ссылки

https://www.meziantou.net/list-all-routes-in-an-asp-net-core-application.htm
https://t.me/NetDeveloperDiary/1486


Последнее обновление : 9 июля 2023 г.
Дата создания : 1 августа 2022 г.

Комментарии

Комментарии