如何获取所有Razor Page路由端点并筛选具有特定属性值的端点



我有一个自定义属性,我想应用到像这样的Razor页面

@attribute [PageKey("PageKeyToSearchFor")]

然后从另一个Razor页面,我想搜索我所有的Razor页,寻找一个有我正在寻找的密钥的页面

您可以从依赖项注入中获得EndpointDataSource,它将允许您访问路由系统中的所有注册端点。

对于每个端点,您可以使用endpoint.Metadata.GetMetadata<TYourAttribute>()方法检查属性,然后在GetMetadata不为null的情况下与值进行比较。

注意:如果您正在查看Razor Page端点或任何其他可能被动态编译的端点,那么EndpointDataSource中的端点可能没有您期望的所有元数据。要获得完整的元数据,您需要使用PageLoader类(也可以从DI获得(来获得包含所有元数据的完整端点。例如:

var pageActionDescriptor = endpoint.Metadata.GetMetadata<PageActionDescriptor>();
var endpointWithFullMetadata = await pageLoader.LoadAsync(pageActionDescriptor)

最新更新