asp.net вопрос маршрутизации MVC - PullRequest
3 голосов
/ 04 августа 2010

маршрутизация по умолчанию работает отлично

mysite.com / home / about

и я даже вижу, как настроить его, чтобы сделать его короче

, поэтому я могу сказать:

mysite.com / edit / 1 вместо mysite.com/home/edit/1

но как я могу увеличить время обработки URL, как показано ниже

mysite.com / admin / user / 1 // работает

mysite.com / admin / user / details // не работает

mysite.com / admin / question / create // не работаетработа

я не могу просто рассматривать идентификатор как действие?Мне нужен собственный маршрут?

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

Большое спасибо

Ответы [ 2 ]

2 голосов
/ 24 августа 2010

Как уже упоминалось, вероятно, вам лучше всего использовать новую функцию Области

Вы можете достичь этого типа маршрутизации без Области, но с увеличением количества контроллеров обслуживание вашего сайта будет уменьшаться. По сути, вы должны жестко закодировать имя контроллера в определение маршрута, что означает, что вам нужно добавлять новые сопоставления маршрутов для каждого нового контроллера администратора. Вот несколько примеров того, как вы можете настроить маршруты без областей.

routes.MapRoute("AdminQuestions", // Route name
                "admin/question/{action}/{id}", // URL with parameters
                new { controller = "AdminQuestion", action = "Index" } // Parameter defaults
    );

routes.MapRoute("AdminUsers", // Route name
                "admin/user/{action}/{id}", // URL with parameters
                new { controller = "AdminUser", action = "Index" } // Parameter defaults
    );

В качестве альтернативы вы могли бы маршрутизировать все через контроллер администратора, но это быстро стало бы очень запутанным, когда действия вашего контроллера выполняли несколько ролей.

routes.MapRoute("Admin", // Route name
                "admin/{action}/{type}/{id}", // URL with parameters
                new { controller = "Admin", action = "Index" } // Parameter defaults
    );

С вашими действиями AdminController, похожими на:

public virtual ActionResult Create(string type, int id)
{
    switch (type)
    {
        case 'question':
            // switch/case is code smell
            break;
        case 'user':
            // switch/case is code smell
            break;
        // etc
     }
}
1 голос
/ 05 августа 2010

Добавление маршрутов в global.asax довольно просто.Поместите более конкретные маршруты выше более общих маршрутов.Наиболее типичным шаблоном является контроллер / действие / параметр / параметр ... Если вам нужно что-то более сложное, вы можете обратиться к областям MVC. В приведенном выше примере mysite.com/admin/user/details ищетконтроллер с именем «admin» и действие с именем «user», причем все, что после этого является параметром в методе действия (при условии типичной настройки маршрута)

...