Asp.net mvc MVC,动态路由,Unity,确定global.asax中是否存在当前控制器

Asp.net mvc MVC,动态路由,Unity,确定global.asax中是否存在当前控制器,asp.net-mvc,model-view-controller,routing,unity-container,asp.net-mvc-routing,Asp.net Mvc,Model View Controller,Routing,Unity Container,Asp.net Mvc Routing,我试图为我的应用程序做的是动态路由 例如,在应用程序_BeginRequest()中,我想获取当前控制器并确定它是否存在。如果没有,我想添加一组覆盖默认路由的路由,以便我的url如下所示 mysite.com/term from database 但是,如果“来自数据库的术语”是有效的控制器,我希望它使用默认路由 routes.MapRoute( "Default", // Rout

我试图为我的应用程序做的是动态路由

例如,在应用程序_BeginRequest()中,我想获取当前控制器并确定它是否存在。如果没有,我想添加一组覆盖默认路由的路由,以便我的url如下所示

mysite.com/term from database

但是,如果“来自数据库的术语”是有效的控制器,我希望它使用默认路由

routes.MapRoute(
            "Default",                                              // Route name
            "{controller}/{action}/{id}",                           // URL with parameters
            new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
        );
我已经有了我想要的路线。现在我只需要获取当前控制器并确定它是否存在。如果我不添加自定义管线,我将收到以下错误:

IControllerFactory“MySite.Web.UnityController工厂”未为名为“term from database”的控制器返回控制器

是否有一种方法可以使用全局统一来确定控制器是否存在


谢谢

为什么不创建一个实用工具帮助器类,从数据库注册路由,然后在global.asax中应用控制器路由

由于数据库路由是先注册的,如果它找到一个有效的路由,那么它将首先使用该路由。或者你可以设置它,反之亦然。作为一个额外的注意事项,我将确保来自DB的路由具有关联的RouteName,以避免冲突

public class Global : HttpApplication { public static void RegisterRoutes(RouteCollection routes) { //call utility to register routes from db RouteHelper.RegisterRoutesFromDB(routes); //now define my standard routes routes.MapRoute( "Default", "{controller}/{action}/{id}", new { controller = "Home", action = "Index", id = "" } ); ... 公共类全局:HttpApplication { 公共静态无效注册表项(路由收集路由) { //调用实用程序从数据库注册路由 RouteHelper.RegisterRoutesFromDB(路由); //现在定义我的标准路线 routes.MapRoute( “默认”, “{controller}/{action}/{id}”, 新建{controller=“Home”,action=“Index”,id=”“} ); ... 是一个解决方案。使用它,您可以为每个路由定义替代路由,如下所示

   var defaultRoute = routes.MapReplaceableRoute(
              name: "Default",
              url: "{controller}/{action}/{id}",
              defaults: new { controller = "Home", action = "Index", id = 
  UrlParameter.Optional    }
          );

        var route = routes.MapRoute(
            name: "Dynamic",
            url: "{name}",
            defaults: new { controller = "Dynamic", action = "Index" });

        defaultRoute.AlternativeRoute = route;