• MVC5之路由机制


    ---恢复内容开始---

    MVC是一种模式,是基于asp.net上的一种设计。路由机制不属于MVC,路由机制属于asp.net。因此,mvc的路由机制就是基于asp.net路由机制上的一种“自定制”。

    ASP.Net路由系统中的核心就是Route对象,每一个Route对应一个路由模板,多个Route对象再加上匹配方法共同构成一个路由表,更确切表述为路由机制(即RouteTable类,该类位于命名空间System.Web.Routing)。

    RouteTable类中的静态属性Routes具有一个根据HttpContext中传入的物理路径映射到一个路由模板上的方法。RouteCollection实际是Route的集合,即包含了很多Route,后面会做介绍。

    RouteTable
    Static RouteCollection Routes;//RouteCollection 具有一个方法MapRoute
     

    RouteBase类

    Route对象是继承于抽象类RouteBase,一个方法用来控制根据url进行路由,另一个获取虚拟路径。属性用于确定采用哪种方法进行路由,默认为true即采用GetRouteData方法。因此我们在访问  ~/sample/sample.html无法直接访问该文件,而webForm下则可以通过改变此值直接获取虚拟路径的方式访问 sample.aspx页面文件(下面只介绍实施路由的情况)。

                                                                                        RouteBase
    abstract RouteData GetRouteData(HttpContext httpcontext)  
    abstract VirutualPathData GetVirtual(RequestContext requestcontext)
    bool RouteExistingFiles{get;set;}

    RouteData类

    Route属性,返回生成的RouteBase对象;DataTokens实际存储的就是注册的路由模板,Values存储的为传入的Url,在路由匹配时会对二者进行解析匹配。

    RouteHandler是这其中最关键的属性,在web请求中HttpHandler来处理请求(即对传入的url以及参数,封装成上下文对象,然后传入接下来要执行的动作即controller的执行)。

    PS:了解这块,需要了解httphandler如何在整个HttpApplication对象活动期间在调用默认handler前去加载指定的handler;可以在web.config中指定特定Httphandler来处理相应请求。

    RouteData
    Route();
    Route(RouteBase route,IRouteHandler routehandler);
    string GetRequiredString(string name);
    RouteBase Route {get;set;}
    IRouteHandler RouteHandler{get;set;}
    RouteValueDictionary DataTokens{get;}
    RouteValueDictionary Values{get;}

    Route类

    Route类继承于RouteBase,也是我们在global.asax中进行定义的对象。属性URl即代表在global.asax中注册路由时填写的模板

    Route
    。。。。//各种构造函数,基类中方法实现
    string Url{get;set;}
    RouteValueDictionary  Constraints{get;set;}//利用正则进行约束
    RouteValueDictionary  Default{get;set;}//模板默认值
    RouteValueDictionary  DataToken{get;set;}
    IRouteHandler RouteHandler{get;set;}

    RouteCollection类

    RouteCollection继承于collection<RouteBase>,其中最重要的方法就是RouteMapPageRoute方法(参数路由名称,路由url,是否可直接访问物理文件)获取匹配Route对象,。Ignore方法对url过滤。同时RouteCollection实现了线程安全来应对并发时的读写问题。

    还有的主要属性有AppendTrailingSlash和LoweCaseUrls可以对Url进行结尾‘/’以及大小写的处理。

    RouteCollection
    。。。//构造函数,基类方法实现,等
    void Ignore( string url[,object contstrain])//两个ignore重载方法
    Route RouteMapPageRoute(string name,string routeUrl,bool CheckPhysicalUrlAccess)//路由方法,遍历所有Route寻找匹配的并且返回
    其他方法。。。
  • 相关阅读:
    【转】Linux Nginx负载均衡【精】
    网上找的模拟POST提交上传图片类
    (原)二、CentOS Linux 下配制Nginx实现简单的负载均衡配置
    (原)一、CenOS Linux安装nginx
    IOS上传图片方法类
    Objectivec和Java下DES加密解密保持一致
    ubuntu 10.10下面添加samba实现和windows共享文件
    几道位移运算题
    jQuery event(下)
    jQuery ajax —— Baidu ajax
  • 原文地址:https://www.cnblogs.com/ykwang/p/MVC5.html
Copyright © 2020-2023  润新知