AreaRegistration.RegisterAllAreas() не регистрирует правила для области

у меня есть веб-приложение MVC 4, которое состоит из некоторых областей. У меня проблема с правилами маршрутизации области с именем "каталог". Рут-Конфиг.cs файл:

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

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
        );
    }

и глобальных.эйсакс следующим образом:

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

        WebApiConfig.Register(GlobalConfiguration.Configuration);
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);
    }

и CatalogAreaRegistration-это что-то вроде этого:

public class CatalogAreaRegistration : AreaRegistration
{
    public override string AreaName
    {
        get
        {
            return "Catalog";
        }
    }

    public override void RegisterArea(AreaRegistrationContext context)
    {
        context.MapRoute(
            "Catalog_default",
            "Catalog/{controller}/{action}/{id}",
            new { action = "Index", id = UrlParameter.Optional }
        );
    }
}

проблема в том, что при отладке маршруты RouteCollection не включают правила, определенные в этой области. Я использовал routedebugger и увидел, что коллекция routes не состоит из правил области "каталог". Он имеет только правила в RouteConfig.

Я понятия не имею в чем проблема. Спасибо заранее.

2 ответов


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

  • C:\Temp
  • C:\Users\%Username%\AppData\Local\Microsoft\VisualStudio
  • C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET файлы
  • C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Файлы
  • путь\к\Your\Project\obj\Debug

обновление :

  • AppData\Local\Temp\временный ASP.NET файлы

затем перезапустите Visual Studio. Вот как я решил.


просто добавьте пространство имен ваших контроллеров в AreaRegistration:

public override void RegisterArea(AreaRegistrationContext context)
    {
        context.MapRoute(
            "Admin_default",
            "Admin/{controller}/{action}/{id}",
            new { controller = "Home", action = "Index", id = UrlParameter.Optional },
            **namespaces: new string[] { "Web.Admin.Controllers" }**
        );
    }