public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
//其他操作
routesMapRoute(
name: Default
url: {controller}/{action}/{id}
defaults: new { controller = Home action = Index
id = UrlParameterOptional }
namespaces: new string[] { ArtechMvcApp }
)
}
}
再次運行我們的程序會在浏覽器中得到如圖所示的結果從中可以看出定義在命名空間ArtechMvcApp中的HomeController被最終選用可見較之作為當前ControllerBuilder的默認命名空間在路由注冊過程中執行的命名空間具有更高的匹配優先級前者可以視為後者的一種後備(S)
圖 在路由注冊時指定的命名空
間具有更高的匹配優先級
在路由注冊時指定的命名空間比當前ControllerBuilder的默認命名空間具有更高的匹配優先級但是對於這兩個集合中的所有命名空間卻具有相同的匹配優先級換句話說用於輔助解析Controller類型的命名空間分為三個梯隊分別簡稱為路由命名空間ConrollerBuilder命名空間和Controller類型命名空間如果前一個梯隊不能正確解析出目標Controller的類型則後一個梯隊的命名空間將作為後備反之如果根據某個梯隊的命名空間進行解析得到多個匹配的Controller類型會直接拋出異常
針對Area的路由對象的命名空間
針對某個Area的路由映射是通過相應的AreaRegistration進行注冊的具體來說是在AreaRegistration的RegisterArea方法中調用AreaRegistrationContext對象的MapRoute方法進行注冊的如果在調用MapRoute方法中指定了表示命名空間的字符串它將自動作為注冊的路由對象的命名空間否則會將AreaRegistration的命名空間加上*後綴得到的字符串作為路由對象的命名空間
這裡所說的路由對象的命名空間存在於Route對象的DataTokens屬性表示的RouteValueDictionary對象中對應的Key為NamespacesValue就是一個包含字符串數組的命名空間列表通過第章URL路由的介紹Route對象的DataTokens屬性包含的變量會轉移到由它生成的RouteData的同名屬性中
除此之外在調用AreaRegistrationContext的MapRoute方法時還會在注冊Route對象的DataTokens屬性中添加一個Key為UseNamespaceFallback的條目它表示是否采用後備命名空間對Controller類型進行解析如果注冊的路由對象具有命名空間(調用MapRoute方法時指定了命名空間或者對應的AreaRegistration類型定義在某個命名空間下)該條目的值為False否則為True該條目同樣反映在通過該Route對象生成的RouteData對象的DataTokens屬性中
返回目錄ASPNET MVC 框架揭秘
編輯推薦
ASP NET開發培訓視頻教程
Microsoft NET框架程序設計視頻教程
Java程序性能優化讓你的Java程序更快更穩定
Visual C++音頻/視頻技術開發與實戰
[] []
From:http://tw.wingwit.com/Article/program/net/201311/16092.html