我已經建立了類似的路線:MVC路由約束控制器上的名稱
context.MapRoute(
name: "Area",
url: "Area/{controller}/{action}",
defaults: new
{
controller = "Home",
action = "Dashboard"
}
);
context.MapRoute(
name: "AccountArea",
url: "Area/{accountFriendlyId}/{controller}/{action}",
defaults: new
{
controller = "Home",
action = "Dashboard",
accountFriendlyId = RouteParameter.Optional
}
);
context.MapRoute(
name: "AccountCampaignArea",
url: "Area/{accountFriendlyId}/{campaignFriendlyId}/{controller}/{action}",
defaults: new
{
controller = "Home",
action = "Dashboard",
accountFriendlyId = RouteParameter.Optional,
campaignFriendlyId = RouteParameter.Optional
}
);
而且我有一個強烈的願望,有Area/friendlyAccountName/Home
帶我去Dashboard()
但這不起作用(404)。我認爲原因是我們去尋找一個friendlyAccountName控制器。
舒服的知識,如果我應該選擇在我的控制器之一後命名一個帳戶一切都崩潰了,是否有一種方法,以避免遇到字符串找不到相應的控制器的下一個路線?有沒有辦法使用反射,並避免每次修改我的控制器列表時保持約束?
編輯
你知道不使用反射的方式,或者至少包含派生類型搜索到這個領域?當第二個路由參數匹配控制器名稱時(傳遞約束然後在構建控制器時再次搜索),我不喜歡這種開銷兩次的想法。我希望有一種方法可以在構建控制器的時候捕捉異常,然後備份並落到下一個路徑。
沒有第一兩條路線,'氬EA /控制器/ Action'將填補友好ID參數,並送我到默認的控制器和行動和'區域/友好/控制器/ Action'會失敗 –
啊,對不起,我沒有聽清楚'{accountFriendlyId}'將是一個有效的操作名稱。我會更新答案。 –
這些字符串被解析的約定是什麼?我不知道你可以用文字內聯(我可能不會特別用它)。 –