解决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);
}
}
}
本文来自博客园,作者:刘旭阳,转载请注明原文链接:https://www.cnblogs.com/cq-lxy/p/16260022.html