学习ASP.NET MVC5框架揭秘笔记-ASP.NET路由(七)
来源:互联网 发布:2016淘宝销售排行榜 编辑:程序博客网 时间:2024/05/21 18:46
5.RouteTable
对于一个Web应用来说,访问所有页面采用的URL不可能具有相同的模式,与之匹配的Route自然也不可能是唯一的,一个Web应用通过RouteTable类型的静态只读属性Routes维护一个全局的路由表,如下面的代码片段所示,该属性返回一个RouteCollection对象。
public class RouteTable{public RouteTable();public static RouteCollection Routes { get; }}顾名思义,RouteCollection就是一组Route对象的集合。如下面的代码片段所示,RouteCollection直接继承自Collection<RouteBase>,除了继承自基类用于操作集合相关的成员之外,它还定义了一些额外的属性和方法。
public class RouteCollection : Collection<RouteBase>{public void Add(string name, RouteBase item);protected override void ClearItems();public IDisposable GetReadLock();public RouteData GetRouteData(HttpContextBase httpContext);public VirtualPathData GetVirtualPath(RequestContext requestContext, string name, RouteValueDictionary values);public VirtualPathData GetVirtualPath(RequestContext requestContext, RouteValueDictionary values);public System.IDisposable GetWriteLock();public void Ignore(string url, object constraints);public void Ignore(string url);protected override void InsertItem(int index,RouteBase item);public Route MapPageRoute(string routeName, string routeUrl, string physicalFile, bool checkPhysicalUrlAccess,RouteValueDictionary defaults, RouteValueDictionary constraints, RouteValueDictionary dataTokens);public Route MapPageRoute(string routeName, string routeUrl, string physicalFile, bool checkPhysicalUrlAccess,RouteValueDictionary defaults,RouteValueDictionary constraints);public Route MapPageRoute(string routeName, string routeUrl, string physicalFile, bool checkPhysicalUrlAccess,RouteValueDictionary defaults);public Route MapPageRoute(string routeName, string routeUrl, string physicalFile, bool checkPhysicalUrlAccess);public Route MapPageRoute(string routeName, string routeUrl, string physicalFile);protected override void RemoveItem(int index);public RouteCollection(VirtualPathProvider virtualPathProvider);public RouteCollection();protected override void SetItem(int index, RouteBase item);public bool AppendTrailingSlash { set; get; }public bool LowercaseUrls { set; get; }public bool RouteExistingFiles { set; get; }public RouteBase this[string name] { get; }}
当我们调用RouteCollection的GetRouteData和GetVirtualPath方法的时候,该方法会遍历集合中的每一个Route对象。针对每个Route对象,同名的方法就会被调用。如果方法返回一个具体的RouteData或者VirtualPathData对象,他们会直接作为方法的返回值。换言之,集合中第一个匹配的Route对象返回的RouteData或者VirtualPathData对象将直接作为整个方法的返回值。如果每个对象均返回Null,那么整个方法的返回值就是Null。
RouteCollection的RouteExistingFiles属性用来控制是否对存在的物理文件实施路由,也就是说在被解析的URL与某个物理文件的路劲一致的情况下是否还需要对其实施路由。该属性默认值为False,即注册的路由不会影响针对物理文件的请求。
AppendTrailingSlash和LowercaseUrls这两个布尔类型的属性与方法GetVirtualPath有关,他们决定了对URL的正常化行为。具体来说,AppendTrailingSlash属性表示是否需要在生成的URL末尾添加“/”(如果没有),而LowercaseUrls属性则表示是否需要将生成的URL转换成小写。
其实我们使用最为频繁的还是MapPageRoute和lognore这两个方法。前者用于注册某个物理文件与路由模板之间的映射,其本质就是在本集合中添加一个Route对象。后者则与此相反,用于注册一个路由模板使路由系统可以忽略具有对应模式的URL。
当我们在调用MapPageRoute方法的时候,它会将routeName参数作为对应Route对象的注册名称。如下面的代码段所示,RouteCollection具有一个Dictionary<string,RouteBase>类型的字段,注册的Route对象和注册名称之间的映射关系就保存在这个字典对象中。我们可以通过这个注册名称从RouteCollection中提取对应的Route对象。
public class RouteCollection : Collection<RouteBase>{//其他成员private Dictionary<string,RouteBase> _nameMap;}
- 学习ASP.NET MVC5框架揭秘笔记-ASP.NET路由(七)
- 学习ASP.NET MVC5框架揭秘笔记-ASP.NET路由(一)
- 学习ASP.NET MVC5框架揭秘笔记-ASP.NET路由(二)
- 学习ASP.NET MVC5框架揭秘笔记-ASP.NET路由(三)
- 学习ASP.NET MVC5框架揭秘笔记-ASP.NET路由(四)
- 学习ASP.NET MVC5框架揭秘笔记-ASP.NET路由(五)
- 学习ASP.NET MVC5框架揭秘笔记-ASP.NET路由(六)
- 学习ASP.NET MVC5框架揭秘笔记-ASP.NET路由(八)
- 学习ASP.NET MVC5框架揭秘笔记-ASP.NET路由(九)
- 学习ASP.NET MVC5框架揭秘笔记-ASP.NET路由(十)
- 学习ASP.NET MVC5框架揭秘笔记-ASP.NET路由(十一)
- 学习ASP.NET MVC5框架揭秘笔记-ASP.NET路由(十二)
- 学习ASP.NET MVC5框架揭秘笔记-ASP.NET MVC路由(一)
- 学习ASP.NET MVC5框架揭秘笔记-ASP.NET MVC路由(一)
- 学习ASP.NET MVC5框架揭秘笔记-ASP.NET MVC路由(二)
- 学习ASP.NET MVC5框架揭秘笔记-ASP.NET MVC路由(三)
- 学习ASP.NET MVC5框架揭秘笔记-ASP.NET MVC路由(四)
- 学习ASP.NET MVC5框架揭秘笔记-ASP.NET MVC路由(五)
- 黑马程序员——【Java反射学习】反射的应用:测试泛型的本质
- 最有矩链乘问题—常见Dp
- HDU1285---确定比赛名次
- 交互模式和脚本模式
- 关键字过滤高效算法
- 学习ASP.NET MVC5框架揭秘笔记-ASP.NET路由(七)
- DELPHI XE7\XE8 移动开发,Android、iOS
- Unity亚洲开发者大会会议简录之技术篇,Profiler的一些参数的意思
- Oracle学习(三)之重建控制文件
- 辽宁省赛总结
- ajax文件异步上传下载
- hibernate学习(环境配置)
- linux文件搜索命令和命令搜索命令
- 学生信息简单管理(vector)