WEB开发网
开发学院WEB开发ASP.NET ASP.NET MVC路由扩展:路由映射 阅读

ASP.NET MVC路由扩展:路由映射

 2012-03-26 11:39:19 来源:WEB开发网   
核心提示: 8: }AreaRegistration定义了两个抽象的静态RegisterAllAreas方法重载,参数state用于传递给具体AreaRegistration的数据,ASP.NET MVC路由扩展:路由映射(5),当RegisterAllArea方法执行的时候,它先遍历通过BuildManager的静态方法G
   8: }
AreaRegistration定义了两个抽象的静态RegisterAllAreas方法重载,参数state用于传递给具体AreaRegistration的数据。当RegisterAllArea方法执行的时候,它先遍历通过BuildManager的静态方法GetReferencedAssemblies方法得到的编译Web应用所使用的程序集,通过反射得到所有实现了接口IController的类型,并通过反射创建相应的AreaRegistration对象。对于每个AreaRegistration对象,一个AreaRegistrationContext对象被创建出来并作为参数调用它们的RegisterArea方法。
 
如下面的代码片断所示,AreaRegistrationContext的只读属性AreaName表示Area的名称,属性Routes是一个代表路由表的RouteCollection对象,而State是一个用户自定义对象,它们均通过构造函数进行初始化。具体来说,对于最初通过调用AreaRegistration的静态方法RegisterAllAreas创建的AreaRegistrationContext对象,AreaName来源于当前AreaRegistration对象的同名属性,Routes则对应着RouteTable的静态属性Routes表示的全局路由表,而在调用RegisterAllAreas方法指定的参数(state)作为AreaRegistrationContext对象的State参数。
 
   1: public class AreaRegistrationContext
   2: {    
   3:     public AreaRegistrationContext(string areaName, RouteCollection routes);
   4:     public AreaRegistrationContext(string areaName, RouteCollection routes, object state);
   5:  
   6:     public Route MapRoute(string name, string url);
   7:     public Route MapRoute(string name, string url, object defaults);
   8:     public Route MapRoute(string name, string url, string[] namespaces);
   9:     public Route MapRoute(string name, string url, object defaults, object constraints);
  10:     public Route MapRoute(string name, string url, object defaults, string[] namespaces);
  11:     public Route MapRoute(string name, string url, object defaults, object constraints, string[] namespaces);
  12:  
  13:     public string AreaName { get; }
  14:     public RouteCollection Routes { get; }
  15:     public object State { get; }
  16:     public ICollection<string> Namespaces { get; }
  17: }
AreaRegistrationContext的只读属性Namespaces表示一组优先匹配的命名空间(当多个同名的Controller类型定义在不同的命名空间中)。当针对某个具体AreaRegistration的AreaRegistrationContext被创建的时候,如果AreaRegistration类型具有命名空间,那么会在这个命名空间基础上添加“.*”后缀并添加到Namespaces集合中。换言之,对于多个定义在不同命名空间中的同名Controller类型,会优先选择包含在当前AreaRegistration命名空间下的Controller。
 
AreaRegistrationContext定义了一系列的MapRoute用于进行路由映射注册,方法的使用以及参数的含义与定义在RouteCollectionExtensions类型中的同名扩展方法一致。在这里需要特别指出的是,如果MapRoute方法没有指定命名空间,则通过属性Namespaces表示的命名空间列表会被使用;反之,该属性中包含的命名空间被直接忽略。

上一页  1 2 3 4 5 6 7 8  下一页

Tags:ASP NET MVC

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接