RouteTable翻译过来的意思就是路由表,一个Web应用程序具有一个全局的路由表,该路由表通过System.Web.Routiing.RouteTable的静态只读属性Routes表示,该类型返回一个类型为System.Web.Routingg.RouteCollection的集合。

  RouteTable类十分的简单,如下所示

    public class RouteTable
    {
        private static RouteCollection _instance = new RouteCollection();

        //返回一个静态只读的RouteCollection类型实例
        public static RouteCollection Routes
        {
            get
            {
                return RouteTable._instance;
            }
        }
        public RouteTable()
        {
        }
    }

  现在我们来看一下运行时的状态

    public class MvcApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            RouteConfig.RegisterRoutes(RouteTable.Routes); //断点1
        }
    }

  下图就是当断点处于断点1时,RouteTable的状态 ,我们在这里可以很清楚的看到现在Routes属性所包含的路由条数为0,不急我们继续向下走。

ASP.NET MVC 请求流程:Route

2.RouteCollection

  看到名称就不难猜到,这个应该是表示路由集合,我们先来看看这个类里面有什么新奇玩意。

public class RouteCollection : Collection<RouteBase>
    {
        //其余省略

        //是否添加首尾斜杠.默认值为 false.
        public bool AppendTrailingSlash { get; set; }
        //是否将 URL 转换为小写.默认值为 false.
        public bool LowercaseUrls { get; set; }
        //是否应处理与现有文件匹配的 URL.默认值为 false.
        public bool RouteExistingFiles { get; set; }
        //获取路由信息
        public RouteData GetRouteData(HttpContextBase httpContext);
        //获取虚拟路径信息
        public VirtualPathData GetVirtualPath(RequestContext requestContext, string name, RouteValueDictionary values);
        //忽略路由URL和相关约束
        public void Ignore(string url, object constraints);
        //添加路由
        public Route MapPageRoute(string routeName, string routeUrl, string physicalFile, bool checkPhysicalUrlAccess, RouteValueDictionary defaults, RouteValueDictionary constraints, RouteValueDictionary dataTokens);

    }

  稍微了解了这个类是用来干什么的,那么我们就要接着上面的程序向下走了,当然先介绍以下RouteBase和Route类吧

3.RouteBase,Route

  在上图中我们看到了RouteBase,Route类,来说一下它们是什么吧。

  RouteBase

  RouteBase是Route类的父类,我们还是来看下它的类结构吧

public abstract class RouteBase
    {
        private bool _routeExistingFiles = true;

        // 指示 ASP.NET 路由操作是否应处理与物理文件匹配的 URL,这里默认是True,即可以使用WebForm方式请求物理文件,但是在MSDN中描述
        //这个属性的默认值为False
        public bool RouteExistingFiles
        {
            get
            {
                return this._routeExistingFiles;
            }
            set
            {
                this._routeExistingFiles = value;
            }
        }

        // 获取路由信息,保存在RouteData中
        public abstract RouteData GetRouteData(HttpContextBase httpContext);

        // 获取虚拟路径信息,保存在VirtualPathData中
        public abstract VirtualPathData GetVirtualPath(RequestContext requestContext, RouteValueDictionary values);
    }
View Code

相关文章:

  • 2021-10-07
  • 2021-12-16
  • 2021-07-18
  • 2022-02-20
  • 2022-12-23
  • 2021-05-25
  • 2021-07-13
猜你喜欢
  • 2021-07-27
  • 2021-10-20
  • 2021-07-13
  • 2021-07-07
  • 2022-01-03
相关资源
相似解决方案