【问题标题】:Asp.Net Core GetRoutes per assembly or namespace or project每个程序集或命名空间或项目的 Asp.Net Core GetRoutes
【发布时间】:2021-10-02 09:58:28
【问题描述】:

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

在两个项目中都定义了 Razor 页面,当我使用 AspNetCore.RouteAnalyzer(如在 Get all registered routes in ASP.NET Core 中看到的)时,我可以大致了解所有可访问的路线。但我想知道路线的程序集、项目或命名空间。我怎样才能做到这一点?

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

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

【问题讨论】:

  • Here 可以看到ActionDescriptor 将由 ASP.NET Core 提供。通过_e.ControllerDescriptor.ControllerType.Assembly 你应该得到程序集。但是您要么必须复制代码并自行实现,要么要求维护者进行更改
  • Tnx mu88,我复制了自定义的代码。但是我得到了错误_e.ControllerDescriptor.ControllerType.Assembly: error CS1061: 'ActionDescriptor' does not contain a definition for 'ControllerDescriptor' and no accessible extension method 'ControllerDescriptor' accepting a first argument of type 'ActionDescriptor' could be found (are you missing a using directive or an assembly reference?)。我错过了什么?
  • 啊,是的,我明白了:ControllerDescriptor 不再存在于 ASP.NET Core 中。你能看看_e.BoundProperties_e.Properties是否包含有用的东西吗?
  • 参见:stackoverflow.com/questions/28435734/… 并按控制器/剃须刀页面组件过滤端点
  • @CribAd 我问过 ASP.NET Core 维护者,这似乎只能在 ASP.NET Core 6 中实现:github.com/dotnet/aspnetcore/issues/34759

标签: c# asp.net-core razor-pages


【解决方案1】:

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

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

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;
         // ... 
    });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-12
    • 1970-01-01
    • 1970-01-01
    • 2020-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多