Как регистрировать области для маршрутизации

Я создал приложение MVC, имеющее 3 разных области. (Admin, User, News) Это мой файл RouteConfig.cs в каталоге App_Start:

public class RouteConfig { 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 }, namespaces: new[] { "TestMvcApplication.Controllers" } ); } } 

И это мой файл AdminAreaRegisteration.cs:

  namespace TestMvcApplication.Areas.Admin { public class AdminAreaRegistration : AreaRegistration { public override string AreaName { get { return "Admin"; } } public override void RegisterArea(AreaRegistrationContext context) { context.MapRoute( "Admin_default", "Admin/{controller}/{action}/{id}", new { controller = "Home", action = "Index", id = UrlParameter.Optional }, namespaces: new[] { "TestMvcApplication.Areas.Admin.Controllers" } ); } } } 

И, наконец, это мое содержимое файла Global.asax.cs:

 namespace TestMvcApplication { // Note: For instructions on enabling IIS6 or IIS7 classic mode, // visit http://go.microsoft.com/?LinkId=9394801 public class MvcApplication : System.Web.HttpApplication { protected void Application_Start() { AreaRegistration.RegisterAllAreas(); WebApiConfig.Register(GlobalConfiguration.Configuration); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); BundleConfig.RegisterBundles(BundleTable.Bundles); AuthConfig.RegisterAuth(); } } } 

Главная страница моего сайта полностью загружена и работает. но Домашняя страница администратора или других областей не определяется по маршруту, и я дал это сообщение об ошибке:

 Server Error in '/' Application. The resource cannot be found. Description: HTTP 404. The resource you are looking for (or one of its dependencies) could have been removed, had its name changed, or is temporarily unavailable. Please review the following URL and make sure that it is spelled correctly. Requested URL: /Admin/Home 

Как я могу решить эту проблему? Благодарю.

Call AreaRegistration.RegisterAllAreas() где-то в вашем RegisterRoutes

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

Совет. Используйте инструмент, например RouteDebugger 2.0 или Routing Debugger, чтобы исследовать маршруты

Получить последний NuGet: отладчик маршрута для MVC или RouteDebugger для WepApi

Вот учебник по настройке и использованию RouteDebugger с WebApi

Из представленного кода я вижу 2 возможных вопроса:

  1. Вы не называете RegisterAllAreas
  2. Вы, кажется, не переопределяете свойство AreaName

Попробуйте изменить свой код на:

Global.asax

 public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); AreaRegistration.RegisterAllAreas(); routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }, namespaces: new[] { "TestMvcApplication.Controllers" } ); } 

Область администратора

 public class AdminAreaRegistration : AreaRegistration { public override string AreaName { get { return "Admin"; } } public override void RegisterArea(AreaRegistrationContext context) { context.MapRoute( "Admin_default", "Admin/{controller}/{action}/{id}", new { controller = "Home", action = "Index", id = UrlParameter.Optional } ); } } 

Просто создайте статическое имя classа, это AreaConfig со статическим методом RegisterAreas () здесь код:

 public static class AreaConfig { public static void RegisterAreas() { // // Admin area . . . var adminArea = new AdminAreaRegistration(); var adminAreaContext = new AreaRegistrationContext(adminArea.AreaName, RouteTable.Routes); adminArea.RegisterArea(adminAreaContext); // // Default area . . . var defaultArea = new DefaultAreaRegistration(); var defaultAreaContext = new AreaRegistrationContext(defaultArea.AreaName, RouteTable.Routes); defaultArea.RegisterArea(defaultAreaContext); } } 

затем вызовите его в файле Global.asax.cs следующим образом:

 protected void Application_Start() { . . . AreaConfig.RegisterAreas(); . . . } 
  • Список инициализации элемента C ++
  • Как автоматически перейти к нижней части многострочного текстового поля?
  • Как использовать метод расширения LINQPad Dump () в Visual Studio?
  • Понимание событий и обработчиков событий в C #
  • Читать весь ASCII-файл в C ++ std :: string
  • Получить разрешение экрана в приложении Win10 UWP
  • Какая разница между classами WebClient и HTTPWebRequest в .NET?
  • Время жизни
  • Strip Byte Order Mark от строки в C #
  • System.Net.Mail создает недействительные электронные письма и файлы eml? Вставка дополнительных точек в имена хостов
  • Ограничения типа Enum в C #
  • Давайте будем гением компьютера.