Skip to main content
 首页 » 编程设计

c#之如何使用单一路由在 asp.net webform 中创建友好的 url

2024年08月06日39dudu

我不确定是否可以创建完整的友好 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); 
            } 
        }