【发布时间】:2011-02-05 08:04:15
【问题描述】:
在Application_Start 上的Global.asax 文件中,我通过循环访问从数据库收集的网页列表,在RouteTable.Routes 中创建了一定数量的路由。这工作正常,所有路线都已创建并根据需要运行。但在我的 Web 应用程序中,用户可以修改数据库,从而修改网页的集合。这意味着在应用程序的生命周期中,某些路由会失效,需要添加新的路由。
我希望做的是:当用户对网页集合进行更改时,我想清除 RouteTable 并通过再次循环(修改后的)网页集合来重新加载它。
不幸的是,Global.asax 中的 Application_Start 只运行一次,即在应用程序的开头。我尝试将其移至Session_Start,由于RoutesTable 是静态的,这会导致不良行为。
如何让我的用户能够即时更改网页集合,同时让静态 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:感谢您的评论。您的意思是在“匹配路由”和“重定向到物理文件”之间添加一些功能?然后让每个请求都匹配
*路由并让这个中间层进行重定向?如果是这样,您能否就如何实施这种方法给我一些指导?
标签: c# asp.net global-asax routetable