Создает ли ASP.NET MVC маршруты по умолчанию для областей - PullRequest
4 голосов
/ 01 февраля 2011

У меня есть несколько областей в моем приложении MVC 3 Auth и Users.Я использую Phil Haacks Route Debugging tool , чтобы просмотреть список моих маршрутов и посмотреть, какой из них выбран на основе моего URL.

Однако есть несколько маршрутов, которых у меня нетсоздан либо в моем файле AreaRegistration, либо в Globalasax, и я не знаю, откуда они пришли и как от них избавиться.Маршруты выделены желтым цветом ниже.

Вы также можете видеть, что я создал маршрут по умолчанию в моей области аутентификации (выделен зеленым цветом), который просто указывает на действие входа в систему моего контроллера аутентификации.Я отладил RouteTable, и он добавляется, когда AreaRegistration.RegisterAllAreas ();метод называется.Однако он не добавляется в AreaRegistration, поскольку он также прошел через это.

Добавляет ли ASP.NET MVC это по умолчанию, и если да, можно ли его как-то удалить?

enter image description here

Ответы [ 3 ]

5 голосов
/ 01 февраля 2011

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

В конце концов я избавился от всех своих областей из своего приложения и просто получил базовую маршрутизацию Global.asax. Когда я запустил приложение, я увидел в отладчике маршрутов, что коллекция маршрутов все еще заполняется маршрутами из уже не существующих областей. Попробовав многие вещи, включая удаление всего из моих временных файлов ASP.NET, возни с IP AppPools и очистку данных браузера, я наконец нашел ответ.

Я удалил все из папки bin для веб-сайтов, сделал перестройку и низкий уровень, и вот, маршруты пропали. Я восстановил свои области с описанным конфигом, и все работает как надо.

Я понятия не имею, почему мое приложение MVC держалось и заполняло старые маршруты, но как только мой бен был очищен, и новые dll создали, все работало как должно. Если кто-нибудь там знает, почему это может быть, то мне было бы очень интересно.

2 голосов
/ 01 февраля 2011

Да, у каждой области есть свой собственный файл AreaRegistration, который определяет маршруты области. Ищите его в корневой папке вашего региона.

Для вашей пользовательской области, посмотрите в Области -> Пользователь -> UserAreaRegistration.cs

Он должен содержать что-то вроде этого:

    public class UserAreaRegistration : AreaRegistration
    {
        public override string AreaName
        {
            get
            {
                return "User";
            }
        }

        public override void RegisterArea(AreaRegistrationContext context)
        {
            context.MapRoute(
                "User_default",
                "User/{controller}/{action}/{id}",
                new { action = "Index", id = UrlParameter.Optional }
            );
        }
    }
0 голосов
/ 24 февраля 2011

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

JB

...