Как отключить маршрут по умолчанию на контроллере ASP.NET MVC 5

1

Я создаю веб-приложение (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

Можно ли отменить маршрутизацию по умолчанию контроллера/действия?

Есть ли более жизнеспособные решения этой проблемы, о которых я бы не подумал?

Теги:
asp.net-mvc

2 ответа

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
    Я собираюсь проверить это сегодня вечером, но это кажется жизнеспособным решением
  • 0
    Я хотел бы добавить, что для того, чтобы это работало, вам нужно поместить раздел admin маршруты перед стандартным
Показать ещё 1 комментарий
0

Попробуйте удалить с помощью этого

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню