2

通常情况下,我对一个问题有一个很好的解决方案,不幸的是会导致另一个问题。基于数据库条目的动态路由

我们有一个应用程序,提供服务给各个组织的成员,更大的父母的一部分。这些组织需要自定义URL。因此,组织成员A访问URL https://server/vdir/OrgA,组织成员B访问网址https://server/vdir/OrgB

这两种方法都会映射到应用中完全相同的区域,控制器和操作,但由于某些自定义视图内容,它们可能与最终用户看起来不同。

由于使用此应用的组织列表是动态的,并且由于并非所有组织都将同时开始使用它,因此我开始以编程方式设置路由映射。在目标区域中,我重写了RegisterArea方法,从数据库中提取活动组织,并为每个组织执行自定义上下文.MapRoute调用。

这样做,这样避免了另一个问题,这是,在他们有不同的组织sitepath(“OrgA时”)的URL看起来就像那些在他们有一个有意义的区域名称,这实际上没有地图的地区。将组织站点路径作为虚拟区域名称处理并将其显式映射到目标区域可避免某些错误导向。

这个工程,很好。但是:它全部在Application_Start中执行。如果我们添加一个组织,那么在我们重新启动应用程序之前它不会变为活动状态,这对任何正在使用该应用程序的人都会造成高度干扰。

所以我的问题有两个:

  1. 是否有比我这样做的更好的办法?我的确研究了这个问题,但是相关的关键词如此无处不在,以至于它有点像针锋相对。
  2. 如果没有,有没有办法刷新路线映射,而无需重新启动应用程序?

回答

2

Phil Haack写了一篇文章dealing with exactly this problem

其中真正的短版本是将路由注册放在Global.asax以外的文件中,并缓存该文件的内容。缓存将文件作为依赖关系,并在缓存失效时调用方法(读取:文件已更改),以重新注册路由。

+0

我认为在我的情况下,我们会尝试基于SQL Server依赖关系做些事情:当我们的组织缓存失效并刷新时,我们会重新注册路由。但原则是一样的。非常感谢这篇文章的指针! – 2012-03-06 16:19:33