MVC中注册路由及其路由的设置

MVC中简单解析URl过程:用户请求URl,通过路由表中的信息匹配URl找每一个路由规则,匹配成功后,解析路由数据,把响应的路由数据根据key-value对的形式存数在路由数据中 例如:URl:http://BoolShoop.aspx/Home/Index/id=23&count=40 解析后:RouteData["Controller"]="Home",RouteDate["Action"]="Index" ,RouteDate["id"]="23",RouteDate["count"]="40"

-------------------------------------------------------------------------------------------------------------------------------------------------------------

几大对象: Route路由规则对象:路由的名字(必须唯一,相当于字典中的key),URl格式:匹配URl的一个模版"{controller}/{action}/{id}",路由hanlder:职责在第7个事件时候获取最终执行processrequest方法的httphanler对象(即在application管道的11-12个事件之间执行的页面对象) RouteData路由数据对象,是一个字典的集合,存放URl地址匹配了路由规则后根据这个匹配的路由规则解析出来的数据,并且会把这个匹配上了的路由规则中的Handler对象放到路由数据中,例如上面的解析后的结果 RouteColloection:路由规则集合对象,包含了多个Route RouteTable:路由表,里面有一个静态的路由规则集合对象:RouteCollection RouteTable.Routes global文件中注册路由原理: 当应用程序第一次启动的时候调用了 protected viod Application_start()方法在这个方法中完成了路由的注册过程,这个方法中调用了一个静态的方法 RegisterRoutes(RouteTable.Routes)并且传递过去了一个路由表的一个静态的路由规则对象,在这个方法中完成规定路由规则,到注册过程,其中有一个根据传来的RouteColloection routes对象的方法 routes.MapRoute(//把参数初始化一条路由规则对象,并且把他放到RouteColloection集合中去 "Default",//路由规则名称,必须唯一 "{controller}/{action}/{id}",//路由规则 有时候为了SEO我们也可以把路由规则写成静态Html页 //例如:{controller}-{action}.html;当访问的时候也要按照这规则 //http://localhost:8080/BookShop-index.html new {controller="Home",action="Index",id=UrlParameter.Optional}//默认的路由参数 new {controller=@"^\w+$"};//约束了控制器的类型是字母不能出现其他的 new string[] {"BookShop.UI.Main.controllers"}//约束了只在当前的命名空间中去找控制器 ) 路由规则注意: 1、一般为了SEO的友好,URl的层次不要超多3层,http://localhost/频道/具体网页 2、同时我们也可以注册多个路由规则,但是在使用路由规则去解析用户请求的URl的时候是有顺序的,是从前往后匹配的,如果前面的匹配上了后面的将不再执行,所以设置路由方案的时候最好把覆盖面广的路由规则放在后面 MapRoute()内部原理: 当我们去查询MapRoute()方法内部做了什么的时候我们发现: public static Route MapRoute(this RouteCollection routes, string name, string url, object defaults, object constraints, string[] namespaces) { Route route = new Route(url, new MvcRouteHandler()) { Defaults = new RouteValueDictionary(defaults), Constraints = new RouteValueDictionary(constraints), DataTokens = new RouteValueDictionary() }; routes.Add(name, route);//通过集合的扩展方法将新常见的路由规则放入路由集合中 return route; }

——————————————————————————————————————————----------------------------------------------------------------------

public Route(string url,IRouteHandler routeHandler)//路由的构造方法 { this.Url=url; this.RouteHandler=routeHandler; } 根据我们传递来的参数,创建了一个Route路由规则对象,并且在初始化这个对象的时候还传递过去了一个new MvcRouteHandler()路由的一个Handler对象(同时也表示了新创建的这个ROute对象中有一个字段或者是属性是用来存储这个路由Handler对象的),其实他仅仅的目的是,在后面会提到,在Application管道的第7个事件的时候通过他来获取到那个最终执行的HttpHanlder对象,来在11-12个事件之间执行页面周期, 最后根据我们传递来的路由集合把新创建的这个路由规则添加到集合中

转载于:https://www.cnblogs.com/One-dream-man/archive/2012/08/25/2656969.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值