如何注册路由区域

我创建了具有3个不同区域的MVC应用程序。 (管理员,用户,新闻)这是我在App_Start目录中的RouteConfig.cs文件:

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 

我怎么解决这个问题? 谢谢。

RegisterRoutes某处调用AreaRegistration.RegisterAllAreas()

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

提示:使用RouteDebugger 2.0或Routing Debugger等工具调查您的路线

获取最新的NuGet: 适用于MVC的Route Debugger或适用于WepApi的RouteDebugger

这是一个关于如何使用WebApi设置和使用RouteDebugger的教程

从提供的代码中我可以看到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 } ); } } 

只需使用静态方法RegisterAreas()在这里创建一个静态类名称AreaConfig代码:

 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(); . . . }