是否可以在.NET 4中动态创建路由?

在我们的应用程序中,我们使用新的.NET 4路由系统将某些请求路由到站点的其他部分。 我们只允许在晚上发布我们的网站代码,这意味着我们必须迟到工作以发布任何代码更改。 我们经常需要创建自定义路由以支持旧内容的旧链接并将其路由到新内容。 这些通常是需要的,因为我们的路由是在编译的global.asax中定义的,当我们立即需要这些,但是不能进行代码推送时,我们会陷入僵局。

有没有办法我们可以在某种配置文件中定义路由并让网站以编程方式读取它们而无需重新启动应用程序?

由于配置文件的更改需要重新启动应用程序(即使不会,路由仅在启动时注册,而不是在每个请求上注册),我不明白为什么路由注册(开始?)不能在库中“只是”用于路由“(Routes.dll)?

我一直在使用MVCTurbine,它支持自动dependency injection/服务注册和路由注册。 我使用这样的类进行路由注册:

public class RouteRegistrator : MvcTurbine.Routing.IRouteRegistrator { ///  /// Registers routes within  for the application. ///  /// The  from the . public void Register(System.Web.Routing.RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( "Default", // Route name "{controller}/{action}/{id}", // URL with parameters new { controller = "Home", action = "Index", id = UrlParameter.Optional }, new string[] { "MyNamespace.Controllers" }); // Parameter defaults } } 

此类不必是webui项目的一部分,但可以在单独的dll中。 MVCTurbine自动加载(并调用)IRouteRegistrator和IServiceRegistrator的所有实现,这些实现位于bin文件夹中的库中(不必引用)。 并且,据我所知,没有什么能阻止你添加新的路由,通过添加包含IRouteRegistrator实现中的新路由的dll到bin文件夹的应用程序。 这样,您可以“动态”添加新路由,而不会有其他应用程序的风险(如果出现意外情况,则可以轻松删除新的dll)。

如果您不能或不会使用MVC Turbine,您可以使用此概念通过将路径集合从global.asax传递到动态加载的库来“提取”路由注册到外部dll,其中包含(仅)具有路由方法的类注册。

以此(MVCTurbine与否)为起点,如果需要,您可以轻松地将xml或txt配置文件读入foreach循环中以获取常用路由,但该方法仅限于简单路由,因为它很难(复杂,但并非不可能)在文本中表示任何更复杂的路由配置。