我正在使用自定义 admin 部分构建一个Web应用程序(ASP.NET MVC 5),其中包含应用程序的所有参数。
我希望能够轻松更改此部分的名称。
E.g。
myapp.com/admin/{controller}/{action}
可能是
myapp.com/custom-admin-name/{controller}/{action}
我已尝试使用区域,但似乎很难编辑其名称,因为所有controllers
和models
都绑定到该区域{{1 }}
我也试图设置自定义路线
namespace
所以我可以做到
routes.MapRoute(
"AdminControllerAction",
"custom-admin-name/{controller}/{action}",
new { controller = "Dashboard", action = "Index" }
);
但问题是我的管理控制器和操作仍然可以调用使用
mywebsite.com/custom-admin-name/dashboard/index
是否可以取消控制器/操作的默认路由?
对于这个问题我还有什么可行的解决方案吗?
答案 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"]);