在我的Global.asax
文件中,在Application_Start
事件中,我通过循环遍历从数据库中收集的Web页面列表,在RouteTable.Routes
中创建一定数量的路由。这个方法可以正常工作,所有的路由都被创建并按要求工作。但是,用户可以修改数据库的内容,因此Web页面的集合也会发生变化。这意味着,在应用程序的生命周期内,一些路由变得无效,需要添加新的路由。
我的目标是:当用户更改Web页面集合时,我希望立即清除RouteTable
并通过再次循环遍历(修改后的)Web页面集合重新加载它。
不幸的是,Global.asax
中的Application_Start
只运行一次,即在应用程序启动时。我尝试将它移到Session_Start
中,但由于RoutesTable
是静态的,结果会导致不希望出现的行为。
如何让用户能够在运行时更改Web页面集合而保持静态的RouteTable
与之“同步”?
编辑
目前我做了类似下面的事情(伪代码):
public class WebPageInfo // represents a record in the database
{
public string Title; // My nice page
public string Url; // NicePage
public string PhysicalFile; // ~/Page.aspx
}
在Global.asax文件中:
protected virtual void Application_Start(object sender, EventArgs e)
{
foreach (WebPageInfo webPageInfo in webPageInfos)
{
RouteTable.RegisterRoute(webPageInfo.Title, webPageInfo.Url, webPageInfo.PhysicalFile);
}
}
问题在于,在应用程序的生命周期中,用户可以添加/修改/删除
webPageInfos
记录,如何使用这些更改来更新RouteTable?
*
路由作为一个全能路由并编写自己的分派器。 - Marc Gravell*
路由,并让这个中间层执行重定向操作?如果是这样,您能否给我一些方向,告诉我如何实现这种方法? - Bazzz