我不确定是否可以创建完整的友好网址(Slug我认为他们称之为wordpress)。
我想用global.asax文件中定义的单一路径动态创建友好的URL。
示例:
about-us/
about-us/who-we-are/
about-us/sub-page/sub-page2/
media/news/
media/photo-gallery/
media/press/
目前我必须为所提到的每个网址定义路线。
我过去曾尝试使用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路段。
请建议如何调用数据库函数来获取pagehandler并将其分配给路由以处理路由我不确定是否可行。
在wordpress中,他们创建了一个页面&友好的页面名称可以在asp.net Web表单中实现相同的目的。
带数据的样本表
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/
答案 0 :(得分:2)
我尝试使用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);
}
}
答案 1 :(得分:0)
有一个Nuget包可以轻松添加到您的项目中:
这是一个快速教程:
正如Scott Hanselman所述,您首先要在应用程序启动时添加以下代码:
RouteConfig.RegisterRoutes(RouteTable.Routes);
如果您有一个名为AboutUs.aspx的页面,您将自动获得/ AboutUs路线。 只需添加包并致电
routes.EnableFriendlyUrls();
RouteConfig中的(这个默认值随NuGet包一起提供),整个WebForms项目丢失了.aspx扩展名并获取了你想要的路由。