Как настроить маршрутизацию для моего раздела администратора в ASP.NET MVC?

StackOverflow https://stackoverflow.com/questions/1400935

Вопрос

Обычно мои 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 .

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top