Asp.Net 每个程序集或命名空间或项目的核心 GetRoutes

Asp.Net Core GetRoutes per assembly or namespace or project

我正在尝试从我的应用程序中获取所有可访问 url 的概览。我有一个包含 2 个项目的应用程序(一个是默认项目,另一个是 Razor Class 库)。

在这两个项目中都定义了 Razor 页面,当我使用 AspNetCore.RouteAnalyzer(如 中所示)时,我得到了所有可访问路径的概览。但我想知道路线的程序集、项目或命名空间。我怎样才能做到这一点?

2021 年 7 月 28 日 - 在 abdusco 的帮助下更新:

可从 Asp.Net Core 6.0 访问此信息:https://github.com/dotnet/aspnetcore/issues/34759

您无法检索 ASP.NET Core 6 之前的 Razor 页面的运行时类型信息。您只能访问 PageActionDescriptors,但遗憾的是它们不提供类型信息。

With ASP.NET Core 6, this is changed,现在您可以获得 CompiledPageActionDescriptor 的 Razor 页面,其中包含反射信息。

var host = CreateHostBuilder(args).Build();
var provider = host.Services.GetRequiredService<IActionDescriptorCollectionProvider>();
var pageEndpoints = provider.ActionDescriptors.Items.OfType<CompiledPageActionDescriptor>()
    .Select(e => {
         var modelType = e.ModelTypeInfo;
         var route = e.DisplayName;
         // ... 
    });