Ben*_*Ben 7 asp.net5 razor-pages .net-5
是否可以获取 .NET 5 Razor Pages 应用程序中所有页面的列表?
我之前已经在 MVC 和 Blazor 中完成了此操作,方法是获取应用程序中所有类型的列表并按其基本类型对其进行过滤(Controller对于 MVC 和ComponentBaseBlazor)。
对于 Razor Pages,您可以通过获取实现 的所有类型来完成此操作PageModel,但这似乎不适用于没有代码隐藏.cshtml.cs模型文件的页面。
如果您想列出所有可导航页面,可以使用该EndpointDataSource服务。您可以将其注入 PageModel 构造函数或直接注入 Razor 页面。以下示例返回以 Pages 文件夹为根的页面文件的相对路径。数据被添加到哈希集中以防止重复。每个索引文件都有两个端点 - 一个端点带有一个/Index末尾带有 的路由模板,另一个端点带有空字符串而不是/Index.
@using Microsoft.AspNetCore.Mvc.RazorPages
@using Microsoft.AspNetCore.Routing
@inject EndpointDataSource EndpointsDataSource
@{
HashSet<string> Pages = new HashSet<string>();
foreach (var endpoint in EndpointsDataSource.Endpoints)
{
foreach(var metadata in endpoint.Metadata)
{
if(metadata is PageActionDescriptor)
{
Pages.Add(((PageActionDescriptor)metadata).RelativePath);
}
}
}
}
<ul>
@foreach(var p in Pages)
{
<li>@p</li>
}
</ul>
Run Code Online (Sandbox Code Playgroud)
如果您想获取另一个属性,该PageActionDescriptor类型的文档位于: https: //learn.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.mvc.razorpages.pageactiondescriptor
另外,如果您想获取每个页面的路由模板,请过滤元数据以查找与该类型兼容的类型, PageRouteMetadata例如
if(metadata is PageRouteMetadata)
{
Routes.Add(((PageRouteMetadata)metadata).PageRoute);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1922 次 |
| 最近记录: |