2

我想要做的是我的应用程序的动态路由。

例如,在 Application_BeginRequest() 中,我想获取当前控制器并确定它是否存在。如果没有,我想添加一组覆盖默认路由的路由,以便我的 url 看起来像这样

mysite.com/term 来自数据库

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

routes.MapRoute(
            "Default",                                              // Route name
            "{controller}/{action}/{id}",                           // URL with parameters
            new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
        );

我已经按照我想要的方式制定了路线。现在我只需要获取当前控制器并确定它是否存在。如果我不添加我的自定义路线,我会收到此错误:

IControllerFactory 'MySite.Web.UnityControllerFactory' 没有为名为 'term from database' 的控制器返回控制器。

有没有办法使用全局统一来确定控制器是否存在?

谢谢!

4

2 回答 2

3

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

由于您的数据库路由首先注册,因此如果它找到有效路由,那么它将首先使用该路由。或者你可以反之亦然。作为额外说明,我会确保您的数据库中的路线具有关联的 RouteName 以避免冲突。

公共类全球:HttpApplication
{
    公共静态无效注册路由(RouteCollection 路由)
    {
        //调用实用程序从数据库注册路由
        RouteHelper.RegisterRoutesFromDB(路由);

        //现在定义我的标准路线
        路线.MapRoute(
            “默认”,
            "{controller}/{action}/{id}",
            新的{控制器=“家”,动作=“索引”,id=“”}
        );

        ...
于 2009-05-29T14:03:42.397 回答
0

在我的博客中,有一个解决方案。使用它,您可以为每条路线定义替代路线,如下所示

   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;
于 2013-08-08T05:10:36.537 回答