Jas*_*son 12 asp.net-mvc routes asp.net-mvc-routing .net-3.5
我注意到在MVC 2 Preview 2中,AreaRegistration正在以任意顺序加载每个区域的路由.有没有一个好方法让一个先于另一个?
例如,我有两个区域 - "站点"和"管理员".两者都有一个"博客"控制器.
我想要以下内容:
/admin/ --> go to Admin's Blog controller
/ --> go to Site's Blog controller.
Run Code Online (Sandbox Code Playgroud)
问题是它首先加载了站点的路由,所以它匹配{controller}/{action}/{id}
而不是admin/{controller}/{action}/{id}
当我转到URL"/ admin /"时.然后我得到404,因为"站点"区域中没有管理员控制器.
这两个区域都默认为"博客"控制器.我意识到我可以简单地把它site/{controller}/...
作为网址,但如果可能的话,我宁愿把它放在根端.我还尝试在全局RegisterRoutes函数中保留默认路由,但是,它不会发送到"站点"区域.
提前致谢!
Eil*_*lon 30
除了Haacked所说的,很有可能订购区域注册(以及他们的路线).您所要做的就是手动注册每个区域,无论您想要什么顺序.它不像调用RegisterAllAreas()那样流畅,但它绝对可行.
protected void Application_Start() {
var area1reg = new Area1AreaRegistration();
var area1context = new AreaRegistrationContext(area1reg.AreaName, RouteTable.Routes);
area1reg.RegisterArea(area1context);
var area2reg = new Area2AreaRegistration();
var area2context = new AreaRegistrationContext(area2reg.AreaName, RouteTable.Routes);
area2reg.RegisterArea(area2context);
var area3reg = new Area3AreaRegistration();
var area3context = new AreaRegistrationContext(area3reg.AreaName, RouteTable.Routes);
area3reg.RegisterArea(area3context);
}
Run Code Online (Sandbox Code Playgroud)
另一种选择是获取RegisterAllAreas()的代码,将其复制到您自己的应用程序中,并构建您自己的机制来确定订单.如果您想要内置方法所具有的所有花哨的缓存逻辑,那么复制相当多的代码,但您的应用可能甚至不需要.
目前无法订购区域.但是,我认为尝试使每个区域尽可能独立于其他区域是有意义的,因此顺序无关紧要.
例如,不是使用默认的{controller}/{action}/{id}路由,而是将其替换为每个控制器的特定路由.或者为该默认路由添加约束.
我们正在考虑允许订购的选项,但我们不希望过度复杂化该功能.
归档时间: |
|
查看次数: |
6232 次 |
最近记录: |