• 区域块路由与全局路由兼容,双重路由


    在添加了区域块后,如果全局路由默认页设置的是区域块中的页面,则最外层控制器文件夹中的页面不知如何访问,如果兼容呢?

    就是在全局如由,及自定义区域路由中设置namespaces

    在MVC项目中经常会使用到Area来分开不同的模块让项目结构更加的清晰。

    步骤如下:

     项目 –> 添加 -> 区域 (Area)

     输入 Admin

    添加成功后

    Area包含:
    创建一个空MVC工程结构类似,Admin Area 有自己的 Controllers、Models 和 Views 文件夹,不一样的地方就是多了一个 AdminAreaRegistration.cs 文件,这个文件中定义了一个叫 AdminAreaRegistration 的类,它的内容如下:

    根目录可以放一套一样的结构用来做前端开发使用,而admin 目录一般会作为管理员后台来开发!

    AdminAreaRegistration.cs 文件,这个文件中定义了一个叫 AdminAreaRegistration 的类,它的内容如下:

    namespace MvcApp4.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[] { "MvcApp4.Areas.Admin.Controllers" } //指定该路由查找控制器类的命名空间
                );
            }
        }
    }

    在这里需要注意需加入 Areas 所在的命名空间,来控制 controllers 接收的参数,不然访问会出现错误,往下一点会提到。

    namespaces: new[] { "MvcApp4.Areas.Admin.Controllers" }

    AreaRegistrationContext 类的 MapRoute 方法和 App_Start-> RouteConfig.cs  的 MapRoute 方法的使用是一样的,只是区分Area 目录下的路由控制!

    在 Global.asax 中的 Application_Start 方法会自动加了这样一句代码

    protected void Application_Start() {
        AreaRegistration.RegisterAllAreas();
    
        WebApiConfig.Register(GlobalConfiguration.Configuration);
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);
    }

     Controller的歧义问题

    这就是我们需要注意的另一个地方

    我们需要在App_start下的 RouteConfig.cs 也要增加一个 namespaces 来声明 Controller 访问的命名空间!

      //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[] { "MvcApp4.Controllers" }//指定该路由查找控制器类的命名空间 controllers
                );
            }
        }
    
       //areas 下的 AdminAdminAreaRegistration.cs 
        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[] { "MvcApp4.Areas.Admin.Controllers" } //对应的命名空间的 controllers
                );
            }
        }

    参考:

    https://www.cnblogs.com/junny/p/4930805.html

    https://www.cnblogs.com/shy1766IT/p/11337612.html

  • 相关阅读:
    LVM快照备份与恢复
    Docker Images for MySQL Group Replication 5.7.14
    sysbench write and read only
    Leetcode: Closest Leaf in a Binary Tree
    Amazon | OA 2019 | Optimal Utilization
    物联网架构成长之路(27)-Docker练习之Zookeeper安装
    物联网架构成长之路(26)-Docker构建项目用到的镜像2
    物联网架构成长之路(25)-Docker构建项目用到的镜像1
    物联网架构成长之路(23)-Docker练习之Elasticsearch服务搭建
    物联网架构成长之路(22)-Docker练习之Etcd服务搭建
  • 原文地址:https://www.cnblogs.com/shy1766IT/p/11349612.html
Copyright © 2020-2023  润新知