使用asp.net webforms将HttpContext值传递给Global.asax中的动态路由

时间:2015-09-28 06:10:40

标签: c# asp.net webforms url-routing global-asax

我正在寻找一种可以在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

我很感激这方面的帮助。

0 个答案:

没有答案