zoukankan      html  css  js  c++  java
  • Request请求过来之后,MVC的路由匹配处理过程 + Mvc路由匹配的自定义扩展

    1. http请求为什么要走路由匹配?

     http请求处理环节非常多->会把这些环节处理封装成事件event-->ihttpmoudle可以在网站启动时给事件注册动作,网站i懂得时候回加载他的init方法

     -->那么在请求进来后,会完成module注册的动作->UrlRoutingModule注册动作--》请求进来后就在这里完成了对路由规则的匹配

    2.Request请求过来之后,Mvc的路由匹配处理过程

     在Application_start方法中注册路由,
    -->在路由的配置文件中添加路由到RouteCollection,然后更具添加路由的先后顺序去匹配路由(BrowserRoute自定义)
    -->匹配路由之后,更具当前路由,利用MvcRouteHandle生成IHttpHandler
    -->利用HttpHandle调用对应的控制器和Action

    3. 源码分析和扩展

    1).如果路由匹配没有结果,那么什么事也不会发生,继续之前的流程(asp.net)
    2).如果当前请求指向一个具体的物理文件,就return null
    ***1+2 所以,webform在MVC也是可以共存的 -->http://localhost:7088/webform1.aspx
    3).路由是foreach迭代匹配的,遇到第一个吻合的,直接结束
    4).通过GetRouteData完成匹配---路由扩展类BrowserRoute
      4.1) 在路由匹配的时候,修改了匹配方式,可以匹配请求中的任何信息,完成跳转
    5). 请求发过来之后是路由匹配之后,怎么到达控制器和Action?
      在MvcRouteHandler中的方法GetHttpHandler实现的--->扩展该方法在类CustomRouteHandle
       ***将MvcRouteHandler换成CustomRouteHandle,就可以自己按照自己的想法返回想返回的东西,调用想调用的控制器和action方法

    4.代码层面实现MVC路由匹配的扩展

    1)在路由配置文件中向RouteCollection添加自定义路由

     2)自定义路由继承RouteBase,并且重写GetRouteData方法,创建自己的RouteData的时候如果调用的是默认的MvcRouteHandler,那么RouteData必须有value值

     3)自定义路由继承RouteBase,并且重写GetRouteData方法,创建自己的RouteData的时候如果调用的是自定义IRouteHandler

     4) 自定义继承自接口IRouteHandler的类CustomRouteHandler,实现GetHttpHandle方法

     5) 自定义继承自接口IHttpHandler的类CustomHttpHandler,实现ProcessRequest方法,将IsReusable改为true

  • 相关阅读:
    poj3475
    poj2665
    poj2583
    poj2656
    【API进阶之路】破圈,用一个API代替10人内容团队
    除了方文山,用TA你也能帮周杰伦写歌词了
    敏捷转型谁先动:老总,项目经理or团队
    实战案例丨使用云连接CC和数据复制服务DRS实现跨区域RDS迁移和数据同步
    9块钱,构建个私有网盘,关键不限速
    终端传感了解吗?18个知识点为你扫盲
  • 原文地址:https://www.cnblogs.com/fblogs/p/12292250.html
Copyright © 2011-2022 走看看