首先,我需要说我使用的是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...
我需要为它们创建这样的Urls
:Account/CreateAccount
,Account/LogIn
。我想知道是否可以使用route
中的一个RouteConfig
来解决?
答案 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