gpt4 book ai didi

c# - 网页集合发生变化时如何重新加载RouteTable?

转载 作者:太空狗 更新时间:2023-10-29 22:55:10 24 4
gpt4 key购买 nike

Application_Start 上的 Global.asax 文件中,我通过遍历网络列表在 RouteTable.Routes 中创建了一定数量的路由从数据库收集的页面。这工作正常,所有路线都已创建并按要求运行。但是在我的网络应用程序中,用户可以修改数据库,从而修改网页集合。这意味着在应用程序的生命周期中,某些路由会失效,应添加新路由。

我想做的是:当用户对网页集合进行更改时,我想清除 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?

最佳答案

usbsnowcrash 的答案正朝着正确的方向前进。您已经知道如何加载 RouteTable 信息,因此不要将该代码直接烘焙到 Application_Start 方法中,而是将其放入一个可以调用的单独方法中 - 也许类似于注册路由Application_Start 方法将调用 RegisterRoutes 来执行初始加载。在将更改写入页面集合的代码中,在提交更新后,调用 RegisterRoutes 重新加载 RouteTable。

您需要包括一些线程安全调用,例如 RouteTable.Routes.GetWriteLock(),并且您还需要在从数据源重新加载所有内容之前清除路由(如前所述通过 usbsnowcrash)。

我已经看到这种技术与“Bootstrapper”类一起使用,该类提供可根据需要调用的 static(VB 中的 Shared)方法。诀窍是使它成为一个与 Application_Start 方法分开的方法,这样您就可以执行代码,而不必完全依赖应用程序生命周期。确保包括“清除”调用,以便每次调用该方法时都从​​头开始。

关于c# - 网页集合发生变化时如何重新加载RouteTable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4905788/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com