Asp.net mvc MVC,动态路由,Unity,确定global.asax中是否存在当前控制器
我试图为我的应用程序做的是动态路由 例如,在应用程序_BeginRequest()中,我想获取当前控制器并确定它是否存在。如果没有,我想添加一组覆盖默认路由的路由,以便我的url如下所示 mysite.com/term from database 但是,如果“来自数据库的术语”是有效的控制器,我希望它使用默认路由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
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;