如何在控制器ASP.NET MVC 5上禁用默认路由

时间:2014-11-13 17:19:11

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

我正在使用自定义 admin 部分构建一个Web应用程序(ASP.NET MVC 5),其中包含应用程序的所有参数。

我希望能够轻松更改此部分的名称。

E.g。

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

可能是

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

我已尝试使用区域,但似乎很难编辑其名称,因为所有controllersmodels都绑定到该区域{{1 }}

我也试图设置自定义路线

namespace

所以我可以做到

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

但问题是我的管理控制器和操作仍然可以调用使用

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

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

对于这个问题我还有什么可行的解决方案吗?

2 个答案:

答案 0 :(得分: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所述,必须在一般路线之前定义管理路线。

答案 1 :(得分:0)

尝试使用此

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