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

时间:2015-12-29 10:18:29

标签: c# asp.net-mvc asp.net-mvc-routing t4mvc

首先,我需要说我使用的是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。这个控制器有这样的ActionsCreateAccount, CreateAccount(POST), ResetPassword, LogIn, etc...我需要为它们创建这样的UrlsAccount/CreateAccountAccount/LogIn。我想知道是否可以使用route中的一个RouteConfig来解决?

2 个答案:

答案 0 :(得分:2)

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

来自T4MVC文档:2.2.5 routes.MapRoute

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

否则你也可以用

实现同样的目标 来自文档2.3. Use constants to refer to area, controller, action and parameter names

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 }
);

这应该满足您的要求。

答案 1 :(得分:1)

使用默认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
            );

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

只要在列表底部定义了您的海关路线将在它之前触发,它们将继续工作。说到帐户网址时,您的自定义路由与之不匹配,它们将使用默认路由到帐户控制器以及在网址中指定的操作。

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