MVC3 Ресурс не найден - Страница области по умолчанию - PullRequest
0 голосов
/ 06 февраля 2012

Это странный.

Веб-приложение, над которым я работал в течение нескольких месяцев, работало совершенно нормально всего два дня назад.

Базовая структура, о которой идет речь, состоит из ряда областей (основная проблема, связанная с областью «Администратор»), контроллера / вида по умолчанию на самом высоком уровне проекта MVC и системы Castle.Windsor DI.

Совершенно неожиданно на странице по умолчанию для раздела администратора теперь отображается сообщение «ресурс не найден». Это сообщение не зависит от того, получаю ли я доступ к этой странице через RedirectToAction (после входа в систему) или через стандартный возвратный просмотр (...) через систему меню.

У кого-нибудь есть причина, почему этот конкретный маршрут больше не действителен? Или что здесь происходит?

NB: - Маршруты по умолчанию в другой области по-прежнему правильно отображаются - Я могу получить доступ к любой другой странице, используя прямой URL-адрес в адресной строке. - Маршрут по умолчанию для администратора (и 8 других, которые мне требуются) хорошо отображаются в таблице маршрутов

Материал Global.asax:

    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();

        RegisterGlobalFilters(GlobalFilters.Filters);
        RegisterModelBinders();

        RegisterRoutes(RouteTable.Routes);

        ServiceLocator.SetLocatorProvider(() => new WindsorServiceLocator(_container));

        BoostrapContainer();
    }

    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
        routes.IgnoreRoute("{*favicon}", new { favicon = @"(.*/)?favicon.ico(/.*)?" });

        routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Home", action = "LogOn", id = UrlParameter.Optional } 
        );
    }

Регистрация администратора:

public override string AreaName
        {
            get
            {
                return "Admin";
            }
        }

public override void RegisterArea(AreaRegistrationContext context)
{
    context.MapRoute(
        "Admin_default",
        "Admin/{controller}/{action}/{id}",
        new { controller = "AdminDashboard", action = "AdminDashboard", id = UrlParameter.Optional }

    );
}
  • стоит отметить, что для регистрации администратора я попытался указать пространство имен явно с помощью:

    new {"xx.xx.xx.xx.Admin"}

Но не повезло.

Однако попытка ввести localhost / Admin приводит к тому, что ресурс не найден.

enter image description here

enter image description here

1 Ответ

0 голосов
/ 06 февраля 2012

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

Маршруты - это дело «один из первых побед».Это включает в себя регистрацию области.RouteDebugger покажет вам, в каком порядке, по его мнению, находятся маршруты.

Создайте маршрут для вашего администратора:

context.MapRoute(
    "Admin Dashboard Route",
    "admin",
    new { area = admin, controller = "admindashboard", action = "dashboard" }
);

и укажите это в своей области регистрации.

Этодолжен решить вашу проблему.

Проблема в том, что ваш маршрут недостаточно конкретен.

Он хочет «Admin / что-то / что-то», а код говорит: «Ну, еслиПоявляется «admin» / blank, который не соответствует маршруту «admin / что-то / что-то», но он соответствует маршруту «по умолчанию». Он смотрит на количество заполненных сегментов, а также на что (или что нет) в них.

...