如何在控制器 ASP.NET MVC 5 上禁用默认路由
本文关键字:默认 路由 MVC 控制器 ASP NET | 更新日期: 2023-09-27 18:30:21
我正在构建一个带有自定义管理部分的 Web 应用程序(ASP.NET MVC 5),其中包含应用程序的所有参数。
我希望能够轻松更改此部分的名称。
例如
myapp.com/admin/{controller}/{action}
可能是
myapp.com/custom-admin-name/{controller}/{action}
我尝试使用区域,但似乎很难编辑它们的名称,因为所有controllers
和models
都绑定到该区域的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
是否可以取消控制器/操作的默认路由?
对于这个问题,还有我不会想到的更可行的解决方案吗?
有一种方法可以限制给定路由的控制器命名空间,因此不属于这些命名空间的控制器将被忽略。
例如,以下内容将仅限于命名空间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 所提到的,管理路由必须在常规路由之前定义。
尝试用这个删除
RouteTable.Routes.Remove(RouteTable.Routes["NAME ROUTE YOU WISH TO RMOVE"]);