我正在寻找一种可以在global.asax文件中以编程方式创建Route的方法。
我的案例场景:
我将我的页面详细信息存储在数据库表中,让我们将Menu
表格视为
MenuName, MenuID, ParentID, PageURL, PageHandler
Home, 1, 0, /,Default.aspx
About Us, 2, 0, /about-us/, About.aspx
Contact, 3, 0, /contact/, contact.aspx
Mission, 4, 2, /about-us/mission/, About.aspx
Vision, 5, 2, /about-us/vision/, About.aspx
如果我在Global.asax文件中将我的路由编码为静态,那么它可以正常工作,如下图所示。
public static void RegisterRoutes(RouteCollection routes)
{
routes.MapPageRoute("en_Home", "default/", "~/default.aspx", false,
new RouteValueDictionary {
{ "path", "page-not-found" },{ "pagename", "page-not-found" }
});
routes.MapPageRoute("en_aboutUs", "about-us/", "~/about_us.aspx", false,
new RouteValueDictionary {
{ "path", "page-not-found" },{ "pagename", "page-not-found" }
});
}
我希望我的路由是动态的,以便我可以从数据库中读取URL和PageHandler值,并将其作为
传递给Global.asax文件中的Route。我不确定其他CMS是如何做到的,我们只在MCS中创建页面,如其他基于.Net的CMS的wordpress,并为这些页面生成Frieldly URL我希望我的.net webform项目的类似功能到目前为止我不是能够使它发挥作用。
public static void RegisterRoutes(RouteCollection routes)
{
string sURL = HttpContext.Current.Request.Url.AbsolutePath;
//Above Statement give error Say "HttpContext.Current Cant be used in this context
string PageHandler = DataProvider.GetPageHandlerByPageURL(sURL);
routes.MapPageRoute("en_General_Page", sURL, PageHandler, false,
new RouteValueDictionary {
{ "path", "page-not-found" },{ "pagename", "page-not-found" }
});
}
我没有在此获得任何成功,因为我必须将HttpContext.Current.Request.Url.AbsolutePath
值传递给另一个函数,以便我可以获得页面处理程序。它失败并显示错误Cant use HttpCotext in this context
HttpContext.Current.Request.Url.AbsolutePath
在路由RegisterRoutes
功能中不起作用我必须在Application_BeginRequest
中定义它,但它有自己的问题。
如何在我的案例中实现动态路由。我正在使用ASP.Net Webform 4.5
我很感激这方面的帮助。