Устранение неполадок "Ресурс не найден." ошибка - PullRequest
3 голосов
/ 02 июля 2011

У меня есть приложение MVC 3 с несколькими встроенными областями, одна из областей - это моя административная часть моего сайта. Все работало просто отлично. Я хотел попробовать MvcContrib Portable Areas, чтобы сделать мое приложение более модульным, поэтому я установил MvcContrib, и после некоторых проб и ошибок я получил пару Portable областей и запустил их.

Затем я решил переместить мою область администратора в переносную область, поэтому я создал новый проект и отключил мою переносную область администратора. Мне пришлось переименовать мою локальную административную зону, чтобы она не конфликтовала. При перемещении некоторого кода до Admin Admin я решил, что не хочу головной боли перемещать все Telerik и другие вещи, которые я подключил к моей области администратора. Я переместил вещи обратно в основной раздел проекта и удалил PA администратора.

Я снова подключил свою Административную область и перебрал все, что было связано с ее настройкой. Сейчас я не могу загрузить ни одну из областей своего основного проекта. Я продолжаю получать «Ресурс не может быть найден». сообщение об ошибке.

Я даже дошел до удаления ссылки на MvcContrib и Portable Areas, но все равно не повезло. Я нахожусь в конце моей веревки, поскольку я не знаю, как отладить это. Я использовал собственный обработчик маршрута, а также Glimpse, но ни один из них не очень полезен, когда выдается ошибка.

Вот маршрут в моем global.asax

routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Home", action = "Index", id = UrlParameter.Optional }, // Parameter defaults
            null,
            new string[] { "CoolProject.Web.Controllers" }
        );

вот маршрут в моем файле регистрации в админке

context.MapRoute(
            "Admin_default",
            "Admin/{controller}/{action}/{id}",
            new { controller = "Home", action = "Index", id = UrlParameter.Optional },
            new string[] { "CoolProject.Web.Areas.Admin.Contollers" }
        );

вот мой Global.asax

public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Home", action = "Index", id = UrlParameter.Optional }, // Parameter defaults
            new string[] { "CoolProject.Web.Controllers" }
        );

    }

    protected void Application_Start() 
    {

        AreaRegistration.RegisterAllAreas();
        RegisterGlobalFilters(GlobalFilters.Filters);
        RegisterRoutes(RouteTable.Routes);
        InitializeContainer();
        AppStart_Structuremap.Start();

        SiteMapManager.SiteMaps.Register<XmlSiteMap>("AdminNavigation", sitemap => sitemap.LoadFrom("/Areas/Admin/AdminNavigation.sitemap"));

    }

Я проверил свою настройку на аналогичном рабочем сайте, и все то же самое, за исключением пространств имен и классов.

Я занимаюсь разработкой на Win 7 IIS7.5

Используя плагин Glimpse Routes, я вижу, что маршруты существуют, но проблема в том, что маршрут в моем файле Global.axas принимает все запросы к областям.

Что мне нужно сделать с моими маршрутами, чтобы основные приложения и области могли обойтись? Самое смешное, что у меня есть еще одно производственное приложение, использующее области, которые прекрасно работают.

Обновление ....

Я создал новый проект MVC 3, добавил одну область с именем Admin. Затем я отредактировал файлы AdminAreaRegistration.cs и Global.asax, включив пространства имен в оператор MapRoute, скомпилировал его и он отлично работает. Я могу получить доступ к области без проблем.

Затем я сравнил файлы Global.asax и AdminAreaRegistration.cs с файлами в моем неработающем проекте, и они идентичны. Это не проблема с тем, как я настраивал свои маршруты, я думаю, что есть другая проблема, которую я не вижу.

Ответы [ 2 ]

3 голосов
/ 02 июля 2011

Вы звоните

AreaRegistration.RegisterAllAreas();

на Application_Start в вашем Global.asax? Какой сервер вы используете для разработки Cassini, IISExpress, IIS?

Изменить после просмотра более подробной информации.

В вашем регистрационном файле админки, если у вас есть этот код

context.MapRoute(
        "Admin_default",
        "Admin/{controller}/{action}/{id}",
        new { controller = "Home", action = "Index", id = UrlParameter.Optional },
        new string[] { "CoolProject.Web.Areas.Admin.Contollers" }
    );

Я думаю, в "CoolProject.Web.Areas.Admin.Contollers" есть опечатка, и она должна быть "CoolProject.Web.Areas.Admin.Controllers"?

1 голос
/ 08 июля 2014

Убедитесь, что пространство имен в вашем Controller также правильное.Если вы создали новую область путем копирования компонентов MVC из другого приложения MVC, например (как я сделал), легко забыть изменить пространство имен!

...