2014-11-13 124 views
1

我正在构建一个web应用程序(ASP.NET MVC 5)与自定义admin部分应用程序的所有参数。如何禁用控制器上的默认路由ASP.NET MVC 5

我希望能够轻松地更改本节的名称。

E.g.

myapp.com/admin/{controller}/{action} 

可能是

myapp.com/custom-admin-name/{controller}/{action} 

我试着使用领域,但好像这将是很难,因为所有的controllersmodels绑定到该地区的namespace编辑他们的名字。

我也试着设置自定义路线

routes.MapRoute(
    "AdminControllerAction", 
    "custom-admin-name/{controller}/{action}", 
    new { controller = "Dashboard", action = "Index" } 
); 

所以我可以做

mywebsite.com/custom-admin-name/dashboard/index 

但随着该问题是,我管理控制器和动作仍然使用

赎回
mywebsite.com/dashboard/index 

是否可以取消默认控制器/动作的路由?

有没有更多可行的解决方案来解决这个问题我不会想到的?

回答

2

消除有限制的给定路由控制器命名空间的方式,所以它不属于这些名称空间控制器将被忽略。

例如,下面将要在命名空间(如果需要,您可以添加多个命名空间)限于控制器YourApp.Controllers

Route route = routes.MapRoute(
    "Default", 
    "{controller}/{action}/{id}", 
    new { controller = "Home", action = "Index", id = UrlParameter.Optional }, 
    namespaces: new[] { "YourApp.Controllers" }     
); 
route.DataTokens["UseNamespaceFallback"] = false; 

禁用命名空间回退是非常重要的,否则,你只会被优先考虑这些命名空间。

所以,你可以限制缺省路由的命名空间YourApp.Controllers如上,创造限于命名空间YourApp.Controllers.Admin自定义管理路径:

Route route = routes.MapRoute(
    "AdminControllerAction", 
    "custom-admin-name/{controller}/{action}", 
    new { controller = "Dashboard", action = "Index" }, 
    namespaces: new[] { "YourApp.Controllers.Admin" }     
); 
route.DataTokens["UseNamespaceFallback"] = false; 

请注意,由Tareck提到的,管理路线有在一般路线之前定义。

+0

我打算今晚测试,但它似乎是一个可行的解决方案 – RPDeshaies

+0

我想补充一点,使它工作,你需要把管理路由部分的默认前一个 – RPDeshaies

+0

好一点,我将添加到答案 –

0

尝试用这种

RouteTable.Routes.Remove(RouteTable.Routes["NAME ROUTE YOU WISH TO RMOVE"]);