zoukankan      html  css  js  c++  java
  • Asp.Net MVC路由生成URL过程

      这次谈一谈Asp.Net MVC中所学到的路由生成URL的相关技术,顺便提一提遇到的一些坑,真的是掉坑掉多了,也就习以为常了,大不了从坑里再爬出来。初学者,包括我,都以为,mvc的核心是模型视图控制器,其余都是辅助,但是路由却也是可以独立成一个角色的。从ASP.NET发展来,路由已从一个小小角色演变成了独立的一方了,所以这个认识必须打破原有建立的思想。​​

      首先得知道一个概念,路由的功能是什么? 简单的讲就是你拿给我一个地址,我通过路由来查询一下,然后转交给你结果,路由好比一个服务区,确实如此,MVC中,当用户提交一个请求URL,MVC中的URL和其它Web中的是有点区别的,此处的统一资源定位符更多的是侧重于某个控制器类上的某个操作,和磁盘上的资源打的交道是比较少的。服务器上接收到请求URL后,交由路由系统进行处理,通过查询已经注册的路由信息,查看是否有该URL请求,如果有,则进行相应的逻辑操作处理,最终返回需要的HTML和URL,如果找不到URL,那么进入默认页面,或者是直接报错。

      具体的细节在谈一谈:路由的核心是一些非常简单的算法,基于一个由RouteCollection类和RouteBase类组成的简单抽象对象。通过使用RouteCollection.GetVirtualPath()方法来处理相关逻辑并最终生成URL,

    public VirtualPathData GetVirtualPath(RequestContext requestContext,RouteValueDictionary values);
    public VirtualPathData GetVirtualPath(RequestContext requestContext,string name,RouteValueDictionary values);

      路由集合通过这些方法遍历每一个路由并通过已有参数匹配是否能生成URL​,如果有路由应答了,那么它就返回一个包含了URL的VirtualPathData实例以及其它信息,没有就返回一个空值,并查询下一个路由

    如果有利用第二个重载方法的,那么更加简单了,不需要一个一个匹配,直接通过name参数,该参数是路由名称的字符串,可以直接匹配路由集合中该路由名称,一句话说就是直接定位,找到了并符合就生成URL,返回空值就不再匹配其它路由了。

    URL生成详解:

      1.通过RouteCollection.GetVirtualPath()方法,将RequestContext对象,一个包含值的字典,以及用来选择生成URL的路由名称传入方法中。

      2.路由机制查看要求的路由参数,这个参数是必须要存在的参数,并确保提供的路由值字典为每一个必须存在的参数提供了一个值,否则直接返回空值。

      3.一些路由可能包含没有对应路由参数的默认值,如果用户传入的路由值字典中提供了这个参数,并且提供了值,那么这个字典中的值必须和默认参数中给定的值相匹配,不然就返回空值。

      4.然后路由系统应用路由的约束,检查是否符合。

      5.匹配成功,尝试利用字典中的值填充对应参数,进而生成URL​​。

      到这里URL就生成完成了,这个过程中要求比较多,但是跟着步骤来,应该还是容易理解的。还要提及的是一个溢出参数:这是指在URL生成过程中使用但没有在路由定义中指定的路由值,具体指的是路由的URL 默认字典,约束字典中的值,外界值不能做为溢出参数使用。溢出参数会做为查询字符串参数附加在生成的URL之后,只要路由指定的参数达到满足,是否指定额外参数则无关紧要​​

    ​​​

    ​​​​

  • 相关阅读:
    Allegro PCB转换成PADS方法
    Altium Designer只显示某一层,隐藏其他层
    DCDC功率电感(Inductor)选型
    DDR布线教程
    DDR地址、容量计算、Bank理解
    DDR3中的ODT(On-die termination)
    LINUX文件系统操作指令之四
    linux系统之间通过nfs网络文件系统挂载设置方法
    linux消息队列编程实例
    system()函数
  • 原文地址:https://www.cnblogs.com/CKExp/p/10520094.html
Copyright © 2011-2022 走看看