asp.net

位置:IT落伍者 >> asp.net >> 浏览文章

ASP.NET MVC 4框架揭秘:CBuilder(2)[2]


发布日期:2023年03月15日
 
ASP.NET MVC 4框架揭秘:CBuilder(2)[2]

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++音频/视频技术开发与实战

[] []

               

上一篇:ASP.NET MVC 4框架揭秘:CBuilder(1)[2]

下一篇:ASP.NET MVC 4框架揭秘:CBuilder(2)[1]