如何解决如何列出 .NET Razor Pages 应用程序中的所有页面?
是否可以获得 .NET 5 Razor Pages 应用程序中所有页面的列表?
我之前在 MVC 和 Blazor 中完成了此操作,方法是获取应用程序中所有类型的列表并按其基本类型对其进行过滤(Controller
用于 MVC,ComponentBase
用于 Blazor)。
对于 Razor 页面,您可以通过获取实现 PageModel
的所有类型来实现,但这似乎不适用于没有代码隐藏 {{1 }} 模型文件。
解决方法
如果您想列出所有可导航的页面,您可以使用 EndpointDataSource
服务。您可以将其注入 PageModel 构造函数或直接注入 Razor 页面。以下示例返回页面文件的相对路径,以 Pages 文件夹为根。将数据添加到 Hashset 以防止重复。每个索引文件将有两个端点 - 一个带有末尾带有 /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>
如果您想获得另一个属性,PageActionDescriptor
类型的文档在此处:https://docs.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.mvc.razorpages.pageactiondescriptor
此外,如果您想获取每个页面的路由模板,请过滤与 PageRouteMetadata
类型兼容的类型的元数据,例如
if(metadata is PageRouteMetadata)
{
Routes.Add(((PageRouteMetadata)metadata).PageRoute);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。