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" }**
);
}