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

C# 如何在asp.net webform中使用单一路由创建友好url,c#,asp.net,webforms,routing,url-routing,C#,Asp.net,Webforms,Routing,Url Routing,我不确定是否有可能创建完全友好的url(我想他们在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中定义的单一路由创建上述路由 范

我不确定是否有可能创建完全友好的url(我想他们在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文件中,我调用数据库表并获取诸如页面名称、页面处理程序、页面标题等信息

//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" }
                    });
如何动态创建此路由,以便动态传递
关于我们/
&pageHandler,以便一个路由函数调用所有页面的路由。若这是可能的,那个么我可以通过添加额外的路由来更改global.asax路由部分,从而为网站添加尽可能多的页面

请建议如何调用数据库函数以获取pagehandler并将其分配给route以处理路由我不确定这是否可行

在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/   

有一个Nuget包,您可以轻松地将其添加到项目中:

下面是一个快速教程:

正如所提到的,您首先要在应用程序启动时添加这行代码:

RouteConfig.RegisterRoutes(RouteTable.Routes);
如果您有一个名为AboutUs.aspx的页面,您将自动获得/AboutUs路由。 只需添加包并调用

routes.EnableFriendlyUrls();

在RouteConfig中(此默认值随NuGet软件包提供),整个WebForms项目将丢失其.aspx扩展名并获得所需的路由。

我尝试使用应用程序\u 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 = "/"},
        }; 
类中的种子值

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 = "/"},
        }; 

示例显示只有一个单页处理程序,这可以通过url路由轻松实现。你能给我看一个基于上述问题中提到的例子的代码示例吗?我注意到在最新版本的vs中,如果我没有错的话,就输了。aspx不是实际的对象。如果所有文件都在根文件夹中,让我们说一下about.aspx,contact.aspx,news.aspx,gallery.aspx那么,如果您想将新闻路径显示为
www.domain.com/about/our mission
,您将如何实现这一点?在这种情况下,文件不是子文件夹,但它使用相同的about.aspx文件来服务于我们任务页面的内容,但路径将以面包屑样式显示。您真的需要单路径吗,或者只是想在应用程序启动时动态生成路由?至少值得一试,如果您能解释一下最后一位代码,以便了解您的逻辑流程,那就太好了+1你能给我更多的细节吗,你觉得什么不管用?我们在这里拥有的是控制传入url并按我们希望的方式发送给它的能力。我们很容易忽略CSS、图像。