有没有办法通过反射获取 ASP.NET Core Razor Pages 中所有 PageModel 类的 url?

问题描述 投票:0回答:1

我正在创建一个 ASP.NET Core 5 Razor Pages 应用程序,我想添加一个页面来显示当前登录用户的所有可访问页面(其 URL)。每个用户都有不同级别的授权权限,因此我会检查

[Authorization]
属性及其
Policy
属性。另一方面,管理员用户可以访问所有页面,因此它应该看到应用程序中可用的所有网址/页面。

到目前为止,我能够使用反射来获取所有

PageModel
类及其
[Authorization]
属性,但现在我想知道是否有办法获取每个
PageModel
的 url?请注意,我是在应用程序运行时执行所有这些操作,因此当我执行此操作时,路由基础设施应该启动并运行。

c# asp.net-core reflection razor-pages
1个回答
0
投票

您可以像您提到的那样使用反射:

在您的

example.cshtml.cs
文件中,执行如下操作:

public class ExampleModel(ILogger<ExampleModel> logger, IEnumerable<EndpointDataSource> endpointSources)
    : PageModel
{

 public IEnumerable<RouteEndpoint> EndpointSources { get; set; } = Enumerable.Empty<RouteEndpoint>();

 public void OnGet()
 {
     EndpointSources = endpointSources
        .SelectMany(es => es.Endpoints)
        .OfType<RouteEndpoint>).Where(x=>x.Metadata.Any(v=>v.GetType().FullName.Contains("Authorization")));
 }    
}

example.cshtml
中,您可以循环浏览结果:

    @foreach (var item in Model.EndpointSources.OrderBy(x=>x.RoutePattern.RawText))
    {
        @item.RoutePattern.RawText<br />
    }

这将生成这些页面的 url 列表,例如

/secure
/account
/users
© www.soinside.com 2019 - 2024. All rights reserved.