2

У меня есть два контроллера на основе типа пользователя в моем проекте ASP.NET Core. Один из них - AdminController для администратора, а один - UserController для пользователей. И есть также HomeController для входа и контакта. Я использую следующую конфигурацию маршрута карты для администраторов и пользовательских контроллеров.Маршрутизация в ASP.NET Core

config.MapRoute(
     name: "UserRoute", 
     template: "{controller}/{username}/{action}", 
     defaults: new { controller = "User|Admin", action = "Dashboard" } 
); 

Используя выше маршрут конфигурации я получаю следующие типы URLS

/User/user1 
/Admin/user2 

Я не хочу Admin и User части в URL вместо этого я хочу

/user1 
/user2 

Как удалить User и Admin с URL-адресом? Если я удалю контроллер с {controller}/{username}/{action} и укажу только контроллер по умолчанию, он будет работать только для одного контроллера.

+0

Проверьте это Аналогичная проблема: http://stackoverflow.com/questions/3337372/asp-net-mvc-removing-controller-name-from-url. Вы можете использовать ограничение маршрута на дополнительном «MapRoute», не затрагивая маршрут по умолчанию. –

ответ

1

У вас не может быть один и тот же шаблон URL с двумя контроллерами по умолчанию, потому что mvc не сможет понять, какой контроллер использовать.

Вы можете иметь 2 маршрута и каждый из них с/администратора и/пользователя, так же, как это:

config.MapRoute(
     name: "UserRoute", 
     template: "User/{username}/{action}", 
     defaults: new { controller = "User", action = "Dashboard" } 
); 

config.MapRoute(
     name: "AdminRoute", 
     template: "Admin/{username}/{action}", 
     defaults: new { controller = "Admin", action = "Dashboard" } 
); 

И из дома контроллера, вы можете проверить роль пользователя и перенаправить его на правильный маршрут ,

Другой подход, был бы только один маршрут, как вам нужно

config.MapRoute(
     name: "UserRoute", 
     template: "{username}/{action}", 
     defaults: new { controller = "User", action = "Dashboard" } 
); 

Но в этой версии, вы будете иметь только один контроллер, и вы можете включить или отключить действия в соответствии с пользовательской роли

+0

Когда я использую 'RedirectToAction (actionname, controllername)', я не говорю MVC, какой контроллер использовать? Потому что я указываю контроллер при перенаправлении на страницу. Я разделил «admin» и «user» на другом контроллере, потому что у обоих из них очень мало аналогичных функций, и если я создаю только один «UserController» и поддерживаю все типы пользователей в этом контроллере, тогда его будет сложно поддерживать. –

+0

В «RedirectToAction» вы указываете MVC, какой контроллер использовать, поскольку он является параметром, и к тому моменту, когда пользователь выполнил вход в систему, вы уже знаете, какой контроллер использовать, Admin to User. В любом случае, я вижу, что большинство сайтов имеют разные URL-адреса для пользователя и администратора, а в MVC я обычно создаю область для администрирования и даже, возможно, отдельную главную страницу. –

+0

У меня есть разные мастер-страницы для 'user' и' admin' в их соответствующих папках просмотра. Я хотел удалить роль из URL-адреса, потому что любой может узнать тип пользователя, просто изучив URL-адрес. Думаю, мне придется создавать только один «UserController» и обрабатывать типы пользователей, но сохраняя разные представления и главную страницу для всех типов пользователей. –