从RouteConfig.cs获取他们所属的friendlyURL和aspx页面的列表



我想知道是否有一种实现的方法可以从RouteConfig.cs中获得对象列表,在那里我会有实际的aspx页面名称,并且它是友好的URL等价物。我们经常使用URL中的页面名称,总是检查URL的路径中是否包含aspx页面名称或friendlyURL是一件痛苦的事,因为从技术上讲,这些页面可以同时使用这两种方式访问。

所以说我在RouteConfig:中有这个

routes.MapPageRoute(
"ResetPasswordRequestRoute",
"reset-password",
"~/Pages/PasswordResetRequestPage.aspx"
);
routes.MapPageRoute(
"PatientRegistrationPageRoute",
"registration",
"~/Pages/Registration.aspx"
);

我想实现这样的东西:

List<PageNames> PageNames = GetPageNamesFromRouteConfig();

预期结果如下所示:

List<PageNames>() {
{ new PageNames(){ 
Page = PasswordResetRequestPage.aspx, 
FriendlyURL = reset-password} 
},
{ new PageNames(){ 
Page = Registration.aspx, 
FriendlyURL = registration} 
},
}

如果做不到,我想我可以手动将RouteConfig.cs作为文本读取,并将其中的每个项目分开,然后从那里获取,我只是在寻找一个更简单的解决方案。

我想没关系,我是用后一种方式做的。对于同样遇到同样问题的人,这里是我的解决方案,尽管你们用不同的方式编写了RouteConfig.cs,但你们可能需要做一些更改。

/// <summary>
/// Reads App_Start/RouteConfig.cs as file and exports List<PageNameAndFriendlyURL> from it as a collection of all mapped pages in the project
/// </summary>
/// <returns></returns>
internal static List<PageNameAndFriendlyURL> GetPageNamesAndFriendlyURLs()
{
List<PageNameAndFriendlyURL> Output = new List<PageNameAndFriendlyURL>();

string FullText = File.ReadAllText(HostingEnvironment.MapPath("~/App_Start/RouteConfig.cs"));
List<string> Paragraphs = FullText.Split(new string[] { "routes.MapPageRoute" }, StringSplitOptions.None).Skip(1).ToList();

foreach(string Text in Paragraphs)
{
string[] SplitText = Text.Split(new char[] { ',', ')' });

Output.Add(new PageNameAndFriendlyURL()
{
Page = SplitText[2].Replace(""", "").Replace("rn", "").Replace("~", "").Trim(),
FriendlyURL = SplitText[1].Replace(""", "").Replace("rn", "").Trim(),
});
}

return Output;
}

最新更新