解决ASP.NET MVC 拥有多层控制器时,如何配置默认路由

1.一般默认路由的默认配置方式

 public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Login", action = "Test", id = UrlParameter.Optional },
                namespaces: new string[] { "Blog1._0.Areas.Admin.Controllers" }
            );
        }

2.在访问不在最外层的控制器的视图时,(在1中已经配置了访问控制器的路由),需要重新配置新的视图访问方式,并在Global配置文件里面对新配置的视图访问方式,进行注册 ,如下;

public class MvcApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
            //注册log4net
            log4net.Config.XmlConfigurator.Configure(new System.IO.FileInfo(Server.MapPath("~/xmlconfigs/log4net.config")));

            AreaRegistration.RegisterAllAreas();
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);//注册Bundle

            RegisterView();//注册 新的路由访问的视图方式  

            #region 预热(不完善)
            using (var dbcontext = new EFDatabase("Server=47.109.19.12,1433;Initial Catalog=Guo_Blogs;User ID=sa;Password=123456", "").dbcontext)
            {
                var objectContext = ((IObjectContextAdapter)dbcontext).ObjectContext;
                var mappingCollection = (StorageMappingItemCollection)objectContext.MetadataWorkspace.GetItemCollection(DataSpace.CSSpace);
                mappingCollection.GenerateViews(new List<EdmSchemaError>());
            }
            #endregion
        }


        protected void RegisterView()
        {
            ViewEngines.Engines.Clear();
            ViewEngines.Engines.Add(new MyViewEngine());
        }
    //新的视图访问方式
        public sealed class MyViewEngine : RazorViewEngine
        {
            public MyViewEngine()
            {
                ViewLocationFormats = new[]
                {
                "~/Views/{1}/{0}.cshtml",
                "~/Views/Shared/{0}.cshtml",
                "~/Areas/Admin/Views/{1}/{0}.cshtml"//我们的规则,根据实际的默认路由访问方式-进行配置
            };
            }
            public override ViewEngineResult FindView(ControllerContext controllerContext, string viewName, string masterName, bool useCache)
            {
                return base.FindView(controllerContext, viewName, masterName, useCache);
            }
        }
    }

 

posted @ 2022-05-11 21:37  刘旭阳  阅读(232)  评论(0编辑  收藏  举报