仅为一个控制器和该控制器的操作映射路由.其他路由设置保持可操作

本文关键字:路由 控制器 映射 操作 其他 设置 可操作 一个 | 更新日期: 2023-09-27 18:28:18

首先,我需要说我使用的是T4MVC。我的RouteConfig中有许多自定义路线。这是一个例子:

    routes.MapRoute("CollectionDetails", "collection/{slug}/{collectionId}", MVC.Collection.CollectionDetails());    
..............................................                     
    routes.MapRoute("Sales.Index", "sales", MVC.Sales.Index());
    routes.MapRoute("CustomPage", "custom/{slug}", MVC.CustomPage.Index());

所有这些路线运行良好。但我有一个控制器(AccountController),我需要在这样的方案中为其映射路由:ControllerName/ActionName/。我的意思是我有Account Controller。这个控制器有这样的Actions:CreateAccount, CreateAccount(POST), ResetPassword, LogIn, etc...,我需要为它们创建这样的UrlsAccount/CreateAccountAccount/LogIn。我想知道在RouteConfig中使用一个route是否可以解决?

仅为一个控制器和该控制器的操作映射路由.其他路由设置保持可操作

如果你想锁定到特定控制器的路由(在你的情况下,只锁定到帐户控制器),那么你可以用T4MVC这样做:

来自T4MVC文档:2.2.5路线。MapRoute

routes.MapRoute(
     "Account",
     "Account/{action}/{id}",
      MVC.Account.Index(null));

否则你也可以用实现同样的效果

参见文件2.3。使用常量引用区域、控制器、操作和参数名称

routes.MapRoute(
     name: "Account",
     url: "Account/{action}/{id}",
     defaults: new { controller = MVC.Account.Name, action = MVC.Account.ActionNames.Index, id = UrlParameter.Optional }
);

或者回到默认的方式

routes.MapRoute(
     name: "Account",
     url: "Account/{action}/{id}",
     defaults: new { controller = "Account", action = "Index", id = UrlParameter.Optional }
);

这应该能满足您的要求。

使用默认MVC路由:

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

你应该能够实现你想要的。。

只要它被定义在列表的底部,你的海关路线就会在它之前触发,它们就会继续工作。当涉及到帐户URL时,您的自定义路由将与之不匹配,它们将使用到帐户控制器的默认路由和URL中指定的操作。

有关MVC路由的更多信息http://www.asp.net/mvc/overview/older-versions-1/controllers-and-routing/asp-net-mvc-routing-overview-cs