Asp.net-Mvc
MVC 2 區域註冊路由順序
我注意到在 MVC 2 Preview 2 中,AreaRegistration 以任意順序載入每個區域的路由。有沒有一種好方法可以讓一個先於另一個?
例如,我有兩個區域——“站點”和“管理員”。兩者都有一個“部落格”控制器。
我想要以下內容:
/admin/ --> go to Admin's Blog controller / --> go to Site's Blog controller.問題是它首先載入站點的路由,所以它是匹配的,
{controller}/{action}/{id}而不是admin/{controller}/{action}/{id}當我轉到 url“/admin/”時。然後我得到一個 404,因為“站點”區域中沒有管理控制器。這兩個區域都預設為“部落格”控制器。我意識到我可以簡單地把
site/{controller}/...它作為 url,但如果可能的話,我寧願把它放在根目錄。我還嘗試在全域 RegisterRoutes 函式中保留預設路由,但是,它不會發送到“站點”區域。提前致謝!
目前無法訂購區域。但是,我認為嘗試使每個區域盡可能獨立於其他區域是有意義的,因此順序無關緊要。
例如,可以不使用預設的 {controller}/{action}/{id} 路由,而是將其替換為每個控制器的特定路由。或者向該預設路由添加約束。
我們正在考慮允許訂購的選項,但我們不想使該功能過於復雜。
除了 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); }另一種選擇是獲取 RegisterAllAreas() 的程式碼,將其複製到您自己的應用程序中,並建構您自己的機制來確定順序。如果您想要內置方法所做的所有花哨的記憶體邏輯,則需要複製大量程式碼,但您的應用程序甚至可能不需要。