C# 如何注册布线区域

C# 如何注册布线区域,c#,asp.net,asp.net-mvc,asp.net-mvc-4,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 4,我创建了具有3个不同区域的MVC应用程序。(管理员、用户、新闻) 这是我在App_Start目录中的RouteConfig.cs文件: public class RouteConfig { public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute(

我创建了具有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" }
        );
    }
}
这是我的AdminAreaRegistration.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
我怎样才能解决这个问题?
谢谢。

呼叫
AreaRegistration.RegisteralAreas()
您的
注册表项中的某个位置

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    AreaRegistration.RegisterAllAreas();
    ....
}
提示:使用类似或的工具调查您的路线

获取最新NuGet: 或


下面是关于所提供代码的教程,我可以看到两个潜在问题:

  • 你不是在打电话吗
  • 您似乎没有覆盖该属性
  • 尝试将代码更改为:

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

    只需使用静态方法创建一个静态类名itAreaConfig,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();
    
            . . .
        }
    

    您的管理区域中确实有家庭控制器吗?是的,我为每个区域都有一个HomeController.cs类。路由看起来不错,但是您能否验证您在管理控制器中有一个带有
    Index
    操作和
    Views\home\Index.cshtml
    视图的
    HomeController.cs
    ?您的家庭控制器有索引方法吗?您是否重写了
    AreaName
    属性?重写代码在我的类中,但我不会将此属性复制到我的问题中。此代码在我的Global.asax.cs文件中,Visual Studio创建了这些方法。路由调试器如何?你能发布结果吗?我使用了路由调试器,但页面无法加载,问题仍然存在。路由调试器仅在加载的页面中显示路由。@Mojtaba:这就是为什么我的首选项是;-)即使请求的页面未显示,此选项也始终有效。为什么将此标记为答案??所以你让调试器工作了。。。调试器告诉你了什么?最初的问题是什么?是什么修好的?