我有一个ASP.NET MVC4应用程序,我在其中创建了多个区域,有没有一种方法可以通过编程来找出存在的区域的数量和它们的名称。
发布于 2013-03-29 04:49:56
AreaRegistration.RegisterAllAreas();
向DataTokens["area"]
注册每个区域路由,其中值是区域的名称。
因此,您可以从RouteTable
获取注册的区域名称
var areaNames = RouteTable.Routes.OfType<Route>()
.Where(d => d.DataTokens != null && d.DataTokens.ContainsKey("area"))
.Select(r => r.DataTokens["area"]).ToArray();
如果您正在寻找AreaRegistration
本身,您可以使用反射来获取从assambly中的AreaRegistration
派生的类型。
发布于 2017-07-17 13:20:16
AreaRegistration.RegisterAllAreas()
不能用于web应用程序的预初始化。但是,如果您希望在不调用RegisterAllAreas()
的情况下获取区域,例如在自动测试中,则以下代码可能会有所帮助:
var areaNames = new List<string>();
foreach (var type in typeof(MvcApplication).Assembly.GetTypes().Where(t => t.IsSubclassOf(typeof(AreaRegistration)))) {
var areaRegistration = Activator.CreateInstance(type) as AreaRegistration;
areaNames.Add(areaRegistration.AreaName);
}
请注意,MvcApplication
是从HttpApplication
派生的类。您可以使用任何类名,只要该类与程序集注册位于同一程序集中,即从AreaRegistration
派生的类。如果您将应用程序拆分成多个程序集中的区域,则需要相应地调整此代码,以便它搜索所有这些程序集。
https://stackoverflow.com/questions/15690834
复制相似问题