我不确定是否可以创建完整的友好 url(Slug,我认为他们在 wordpress 中称它为 Slug)。
我想使用 global.asax 文件中定义的单个路由动态创建友好的 url。
例子:
about-us/
about-us/who-we-are/
about-us/sub-page/sub-page2/
media/news/
media/photo-gallery/
media/press/
目前我必须为提到的每个 url 定义路由。
我过去曾尝试使用 gloabal.asax 中定义的单个路由创建上述路由
例子
在 global.asax 文件中,我调用数据库表并获取信息,例如 Page_Name、Page_Handler、Page_Title ...
//Create Route
//some logic to get url segments so that it can be passed to
getPageDetails(PageURL)
{
//logic to get PageHandler so that route can be created
}
//For general.aspx Page
routes.MapPageRoute("Page", "about-us/", "~/Aboutus.aspx", false,
new RouteValueDictionary {
{ "path", "Page-not-found" },{ "PageName", "Page-not-found" }
});
如何动态创建此路由,以便我可以动态传递 about-us/ 和 pageHandler,以便一个路由函数为所有页面调用路由。如果这是可能的,那么我可以通过添加其他路由来更改 global.asax 路由部分,从而将尽可能多的页面添加到网站。
请建议如何调用数据库函数来获取页面处理程序并将其分配给路由来处理路由,我不确定这是否可行。
在 wordpress 中,他们创建页面和友好的页面名称,我们能否在 asp.net 网络表单中实现相同的目的。
带有数据的示例表
Page_ID Page_Name Page_Handler Page_URL
1 About Us General.aspx /about-us/
2 Who we are General.aspx /about-us/who-we-are/
3 ... .. /about-us/sub-page/sub-page2/
4. Media #
5 News news.aspx /media/news/
6 Photo Gallery galler.aspx /media/photo-gallery/
请您参考如下方法:
我尝试使用 Application_beginRequest 事件解决您的问题。下面是代码,它不是生产就绪代码 [只是做了一个相同的应用程序],但它是一个如何解决您的问题的示例。您可能需要根据不同的场景添加更多的检查和验证。不过应该问题不大。请阅读并告诉我:
创建了一个类
public class MaintainUrls
{
public int PageId { get; set; }
public string Page_Name { get; set; }
public string Page_Handler { get; set; }
public string Page_Url { get; set; }
}
类种子值
List<MaintainUrls> urls = new List<MaintainUrls>()
{
new MaintainUrls() { PageId = 1, Page_Name = "About Us", Page_Handler = "About.aspx", Page_Url = "/about-us"},
new MaintainUrls() { PageId = 2, Page_Name = "About Who we were", Page_Handler = "About.aspx", Page_Url = "/about-us/who-we-are/"},
new MaintainUrls() { PageId = 2, Page_Name = "About Who we were sub page", Page_Handler = "About.aspx", Page_Url = "/about-us/sub-page/sub-page2/"},
new MaintainUrls() { PageId = 1, Page_Name = "About Us", Page_Handler = "Contact.aspx", Page_Url = "/contact"},
new MaintainUrls() { PageId = 1, Page_Name = "About Us", Page_Handler = "Default.aspx", Page_Url = "/"},
};
Global.asax 中的 Application_BeginRequest
void Application_BeginRequest(Object sender, EventArgs e)
{
string path = Request.Path.ToLower();
if (urls.Any(url=> url.Page_Url.Equals(path)))
{
string handler = urls.First(url => url.Page_Url.Equals(path)).Page_Handler;
Context.RewritePath(@"~/" + handler);
}
}
