Как настроить маршрутизацию для моего раздела администратора в ASP.NET MVC?
-
05-07-2019 - |
Вопрос
Обычно мои URL выглядят как стандартные: www.example.com/controller/action
Теперь я хочу настроить раздел администрирования следующим образом:
www.example.com/admin/ www.example.com/admin/user/list www.example.com/admin/content/add etc.
Формат таков: www.example.com/admin/controller/action
Кажется, я не могу понять, как настроить маршруты так, как показано выше.
Решение
Вам просто нужно сопоставить новый путь с разделом 'admin', жестко закодированным в начале определения маршрута.
Например, добавьте это к своим маршрутам в RegisterRoutes
в файле Global.asax.cs
и убедитесь, что он отображается над маршрутом по умолчанию (при условии, что вы не добавили другие маршруты):
routes.MapRoute(
"Default",
"admin/{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = "" }
);
Примечание. Часть 'admin' жестко запрограммирована в начале определения маршрута.
Примечание 2. Если вы добавили другие маршруты, отличные от заданных по умолчанию, вам необходимо убедиться, что ваши маршруты упорядочены правильно.
Вот ссылка на хороший пост в блоге Скотта Гатри о маршрутизации MVC : Маршрутизация URL
Другие советы
Ответ Келси прямо на месте, но я хотел кое-что добавить к обсуждению. Другой вариант - на самом деле не иметь «администратора» маршруты вообще, но вместо этого требуются сеансы аутентифицированные администратором для фактического доступа к ограниченным URL.
Часто это делается так, как в «традиционной» среде. RESTful приложения. Ваш контроллер представляет тип ресурса, которым вы манипулируете, действие - это глагол, а идентификатор - уникальный идентификатор для конкретного члена этого ресурса.
Другими словами, вместо того, чтобы:
/content/list (for normal users)
/admin/content/add (for admins)
Вы бы имели
/content/list (for everyone)
/content/add (for admin, but must be authenticated to work)
Добавление / admin / к URL на самом деле не добавляет никаких преимуществ (за исключением, возможно, того, что вы можете написать свою логику защиты с помощью одного правила для всего, что находится в / admin), но компромисс - более сложные маршруты и нарушение стандартного RESTful , Нарушение стандартных практик само по себе не является плохой вещью, но вы должны учитывать, что они являются стандартными по определенной причине, и, если у вас нет особых преимуществ для их нарушения, вы можете придерживаться их. Р>
Следует отметить, что в обоих стилях URL вы должны проходить аутентификацию пользователя, иначе любой может использовать его.
В ASP.NET MVC вы можете ограничить доступ к действиям (или даже целым контроллерам) на основе уровня пользователя с помощью ActionFilters. Декорируя ваши действия только для администраторов с помощью этих фильтров, вы можете гарантировать, что только аутентифицированные административные пользователи смогут их использовать. Р>
Читайте запись в блоге Скотта Гу или Роб Коннери пост для получения дополнительной информации.
Начиная с версии 2 MVC, они добавили концепцию 'area', которая позволяет вам делать это правильно :) Вот пост ScottGu о предварительном просмотре MVC 2 .