asp.net 路由学习一

从今天开始打算好好学习《ASP.NET MVC5 框架揭秘》这本书,希望让水平来一个质的提高,当然学习笔记还是要写的。

asp.net路由:IIS为我们提供里重写url机制,但是这在iis级别上解决了url与物理地址的分离,它的实现依赖于一个注册到IIS管道上的本地代码模块,而asp.net路由则是asp.net机制的一部分,并且是通过托管代码写的。那么到底asp.net机制是什么?首先理解一些常用类和对象。

   1.RouteBase类。

      路由系统的核心是Route对象,每一个路由注册(不同的url模式)对应的就是一个Route对象,这些Route对象注册到同一个Web应用中构成一个路由表。Route对象存储在RouteTable类里的静态属性Routes表示,这个属性返回一个RouteCollection对象。这里Route泛指继承自抽象类RouteBase的某个类型的对象

public abstract class RouteBase

        {

            //实现在GetRouteData方法中的路由解析是为了获取路由数据

            public abstract RouteData GetRouteData(HttpContextBase httpContext);

            //GetVirtualPath方法则通过路由解析生成一个完整的虚拟路径

            public abstract VirtualPathData GetVirtualPath(

                RequestContext requestContext,RouteValueDictionary values);

            //它表示是否对现有的物理文件实施路由,默认值为true,即不能通过url访问现有物理文件,只能通过路由注册表。

            public bool RouteExistingFiles { get; set; }

        }

       GetRouteData返回了一个RouteData对象,它用于封装路由数据。RouteData具有一个RouteBase的属性Route,该属性返回生成此RouteData的Route对象。其中还有

DataTokens和Values两个属性,这两个属性都返回RouteValueDictionary对象。RouteValueDictionary是一个实现了IDictionary<string,objects>接口的字典,用来保存路由变量。存储于Values和DataTokens的差别是:Values是解析请求url得到的;DataTokens是直接附加到路由对象上的自定义变量。RouteData类里还有一个非常重要的属性:RouteHandler,它在整个路由系统中具有重要的地位,因为最终用于处理请求的HttpHandler对象由它来提供

       GetVirtualPath返回了一个VirtualPathData对象。此方法被执行时,如果定义的路由模板中的变量与指定变量列表相匹配,它会使用指定的路由变量值去替换模板里的占位符,这样就得到了虚拟路径。生成的虚拟路径与Route对象最终被封装成一个VirtualPathData对象作为返回值。这个方法里还有一个参数,类型为RequestContext。

    public class RequestContext

    {

        //初始化 System.Web.Routing.RequestContext 类的新实例。

        public RequestContext();



        //httpContext:一个对象,该对象包含有关 HTTP 请求的信息

        //routeData: 一个对象,该对象包含有关与当前请求匹配的路由的信息

        public RequestContext(HttpContextBase httpContext, RouteData routeData);



        // 摘要:  获取有关 HTTP 请求的信息。

        // 返回结果: 一个对象,该对象包含有关 HTTP 请求的信息。

        public virtual HttpContextBase HttpContext { get; set; }



        // 摘要: 获取有关所请求路由的信息。

        // 返回结果: 一个对象,该对象包含有关所请求路由的信息。

        public virtual RouteData RouteData { get; set; }

2.Route类

   RouteBase是一个抽象类,在ASP.NET路由系统的应用编程接口中,Route类型是其唯一的直接继承者。这个类里面有一个Url属性,它代表绑定在该路由对象上的路由模板。当请求过来时,就根据Route对象里的Url属性与请求的url匹配,这就是路由解析。

    Route类型除了核心属性Url外,还有一些其他属性。Constraints为模板中的的变量设置一些约束条件,该属性类型为RouteValueDictionary,其key和Value分别为变量名和作为约束的正则表达式;Defaults同样也返回一个RouteValueDictionary对象,它保存了为路由变量定义的默认值。Route类型的DataTokens用于存储一些额外的路由变量,这些路由变量不会参与针对请求的路由解析,但对于调用Route类型的GetRouteData和GetVirtualPath方法得到的对象里的DataTokens包含的路由变量都来源于此。

 这本书感觉真有点难,明天继续!

你可能感兴趣的:(asp.net)